2017-05-04 46 views
0

input.txt文件包含32條記錄,但只有18條記錄在output.txt文件中使用循環批處理腳本處理。任何幫助非常感謝!批處理腳本中的循環未處理輸入文件中的所有記錄

代碼如下(請注意,回聲>>%標準輸出%已經50行:過程聲明不復制到此處):

@echo off 
set "source=C:\test\test\input.txt" 
set "stdout=C:\test\test\output.txt" 

for /f "tokens=1,2,3,4 delims='" %%a in (%source%) do ( 
set partner=%%a&set blank=%%b&set comment=%%c&set host=%%d&set 
call :process 
) 
goto :eof 

:process 
SETLOCAL EnableDelayedExpansion 
SET host_final=%host:~1% 
echo >> %stdout% partner=%partner% comment=%comment% host=%host_final% 
echo >> %stdout% XXXXXXXXXXXXXXXXXXXXXX 
.... 
echo >> %stdout% (line 50 end of %partner%) 
ENDLOCAL 
goto :eof 
+1

如果問題出在數據文件上,您應該發佈數據文件,否則我們只能猜測出現了什麼問題......但是,我敢打賭,未處理的記錄以分號';'開頭,這是'for/F'命令中默認的'eol =;'字符。 – Aacini

+0

是的,正確的問題是字符'|'在數據文件中。我糾正了分隔符,循環處理了所有記錄。謝謝您的回覆。 – MartaT

回答

1

我不知道所有這些行是你「再呼應,但是這是基本的結構,我建議:

@Echo Off 
Set "source=C:\test\test\input.txt" 
Set "stdout=C:\test\test\output.txt" 
For /F "UseBackQ EOL=' Tokens=1,3,4 Delims='" %%A In ("%source%" 
) Do Call :Process "%%~A" "%%~B" "%%~C" 
GoTo :EOF 

:Process 
Set "host=%~3" 
>>"%stdout%" Echo partner=%~1 comment=%~2 host=%host:~1% 
GoTo :EOF 

由於我沒有見過的源文件我必須假設您提供的令牌和分隔符是正確的。

+0

你用我的答案打了一分鐘。標準輸出周圍有'%'。 – LotPings

+0

如果我加了他們,我可能沒有打你!現在修復。 – Compo

+0

使用這個結構我在我的輸出文件中得到了相同的結果。問題在於分隔符。我糾正了這一點,它循環並處理所有記錄。謝謝你的幫助:) – MartaT