2016-05-27 63 views
1

我是Windows批處理文件中90%的路徑。 它需要2個輸入參數,輸入和輸出文件。 然後讀取輸入文件,並將某些行串入子數組中(第2行以後)。 然後我們來到一個輸出循環。 如果我使用!counter2 !,%counter2%不起作用,我的計數器上的延遲擴展不會更新。Windows批量讀取文件,解析並輸出

使用!arrayname [!counter2!]!不起作用。

下面是代碼。

@Echo off 
if [%1] == [] goto usage 
if [%2] == [] goto usage 

echo start time : %time%>logfile.log 
set input_file=%1 
set output_file=%2 
if exist %output_file% del %output_file% 
Echo Start reading %input_file%>> logfile.log 
setLocal EnableDelayedExpansion 

set /a counter=1 

for /F "tokens=* delims=" %%a in ('type %input_file%') DO (
    ::echo !counter! 
    if "!counter!"=="1" set header=%%a 
    if not "!counter!"=="1" (
    set data[!counter!]=%%a 
    set line=%%a 
    set jobnumber[!counter!]=!line:~0,7! 
    set docnumber[!counter!]=!line:~7,5! 
    set pagecount[!counter!]=!line:~12,2! 
    set customernumber[!counter!]=!line:~14,20! 
    set presort[!counter!]=0000 
    set postcode[!counter!]=0000 
    set inserts[!counter!]=!line:~36,11! 
    set filler[!counter!]=000000 
    set address[!counter!]=!line:~58,350! 
    set filler2[!counter!]="                                                                         " 
    set endline[!counter!]=X 
) 
    set /a counter=counter+1 
) 
Echo Start writing %output_file%>> logfile.log 

for /L %%G in (2,1,%counter%) DO (
    set counter2=%%G 
    echo !counter2! 
    echo !jobnumber[%counter2%]!!docnumber[%counter2%]!!pagecount[%counter2%]!!customernumber[%counter2%]!!presort[%counter2%]!!postcode[%counter2%]!!inserts[%counter2%]!!filler[%counter2%]!!address[%counter2%]!!filler2[%counter2%]!!endline[%counter2%]!>>%output_file% 
) 

echo end time : %time%>>logfile.log 
pause 
goto :eof 

:usage 
echo Usage: blah.bat input_filename output_filename 
pause 
goto :eof 

這是echo!jobnumber [%counter2%]!事情沒有得到解決。 echo!counter2!工作正常。

在你問之前,是的,我知道這可以在C#或其他編程語言中做得更好更簡單,但我的任務是在Windows批處理文件中執行此操作。

在此先感謝您提供的任何幫助。 電話

+1

但你可以直接使用'!jobnumber [%% G]!'...... – npocmaka

+0

啊呵呵。在我的第一個循環中無效,但那是因爲櫃檯正在改變。非常感謝。 – telsum2

回答

0

嘗試:

for /L %%G in (2,1,%counter%) DO (
    set counter2=%%G 
    echo !counter2! 
    echo !jobnumber[%%G]!!docnumber[%%G]!!pagecount[%%G]!!customernumber[%%G]!!presort[%%G]!!postcode[%%G]!!inserts[%%G]!!filler[%%G]!!address[%%G]!!filler2[%%G]!!endline[%%G]!>>%output_file% 
) 

你不改變coutner2的價值,所以你不需要它,你可以直接使用%%G

雖然如果您需要在counter2中進行更改,您必須在for循環中重新包裝它並使用它的標記。

+0

非常感謝您的幫助。 – telsum2