2015-05-05 221 views
2

我正在嘗試爲我們在工作中使用的新軟件自動執行一些處理。我有一個.zip文件,每4小時自動從FTP下載一次。 .zip文件然後解壓縮,其中的.txt文件使用2個.bat文件重命名爲.csv文件,我用我的知識很少知道這些文件,並在軟件中導入生成的.csv文件。這部分工作正常。批處理腳本刪除文本文件中的特定行

現在問題是.csv有兩條冗餘行,我需要刪除它才能上傳到軟件:第1行和第3行。我還沒有找到Google搜索的方法。

有人可以幫我解決這些問題嗎?

此外,有沒有辦法將我的多個.bat「合併」在一起?這是我摘錄的腳本:

@echo off 

for /R "C:\FTP Download" %%I in ("*.zip") do (
    "%ProgramFiles(x86)%\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI" 
) 

,這是我的重命名腳本:

@echo off 
ren *.txt *.csv 

我想一定是把它們放在同一個.BAT的方式,但我不明白這一個出來呢。

回答

1

要刪除行1和3:

假設你的輸入是C:\file.txt

首先,讓我們跳過第一線和第二線複製到C:\newfile.txt

@echo off 
for /f "skip=1" %%a in (C:\file.txt) do (
    echo %%a >> C:\newfile.txt 
    goto OutOfLoop 
) 
:OutOfLoop 

現在我們可以完全忽略文件的前三行,然後繼續將想要的文本的其餘部分複製到C:\newfile.txt

for /f "skip=3 delims=*" %%b in (C:\file.txt) do (
    echo %%b >> C:\newfile.txt  
) 

這將替換原來的文件,並刪除我們的時空副本:

xcopy C:\newfile.txt C:\file.txt /y 
del C:\newfile.txt /f /q 

注:

  • 您需要爲每個輸入文件運行這個文本解析器要處理。

要itarate在目錄內的文件,你可以使用:

for /r %%file in (*) do (
    REM Here you can put the code to parse each input file 
) 
  • 你的提取和重命名的代碼應該能夠在一個單一的批處理文件正常工作:

要使重命名起作用,請首先瀏覽至解壓縮文件的目錄。

你最終的腳本將如下所示:

@echo off 

REM Browse to the desired directory 
cd C:\FTP Download\ 

REM Extract all zip files 
for /r %%I in (*.zip) do (
    "%ProgramFiles(x86)%\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI" 
) 

REM Rename all extracted .txt files to .csv 
ren *.txt *.csv 

REM For each .csv file 
for /r %%file in (*.csv) do (

    REM Copy second line to C:\newfile.txt 
    for /f "skip=1" %%a in (%%file) do (
     echo %%a >> C:\newfile.txt 
     goto OutOfLoop 
    ) 
    :OutOfLoop 

    REM Copy fourth to last line to C:\newfile.txt 
    for /f "skip=3 delims=*" %%b in (%%file) do (
     echo %%b >> C:\newfile.txt  
    ) 

    REM replace original file and remove temporary files 
    xcopy C:\newfile.txt %%file /y 
    del C:\newfile.txt /f /q 
) 
1

開始下一行命令在命令行:

for /F "tokens=1* delims=:" %G in ('findstr /N /R "^" xxxx.txt') do @if not "%G"=="1" @if not "%G"=="3" @echo %G %H 

.bat腳本:

for /F "tokens=1* delims=:" %%G in (
    'findstr /N /R "^" xxxx.txt' 
) do if not "%%G"=="1" if not "%%G"=="3" echo %%G %%H 

儘快調試,更換它與下面的代碼片段:

type nul>xxxx.csv 
>>xxxx.csv (for /F "tokens=1* delims=:" %%G in (
    'findstr /N /R "^" xxxx.txt' 
) do if not "%%G"=="1" if not "%%G"=="3" echo(%%H) 

更新:合併兩個代碼片段一個腳本(註釋代碼):

@ECHO OFF >NUL 
SETLOCAL enableextensions 

rem to main working directory 
pushd "C:\FTP Download" 

for /R %%I in ("*.zip") do (
    "%ProgramFiles(x86)%\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI" 

    rem need change working directory due to recursion in `for /R %%I ...` 
    pushd "%%~dpI" 
    for /F "delims=" %%X in ('dir /B *.txt') do (

    type nul>"%%~nX.csv" 
    >>"%%~nX.csv" (for /F "tokens=1* delims=:" %%G in (
     'findstr /N /R "^" "%%~X"' 
    ) do if not "%%G"=="1" if not "%%G"=="3" echo(%%H) 

    rem delete processed text file 
    del "%%~X" 
) 
    rem back to main working directory 
    popd 
    rem archive processed zip file 
    move "%%~fI" "%tmp%\done%%~nxI" 
) 
popd 

資源(必讀):

相關問題