2013-02-19 316 views
0

我遇到了FOR命令的一些問題。我在這裏讀了無數的文章,沒有什麼打到我正在尋找的東西。我正在嘗試使用大量文件(大約6000)的目錄,讀取文件並將數據格式化爲單個文件(如果變量讀取1而不是0)。腳本遠遠沒有完成,我只是有一個問題。我到目前爲止的代碼是這樣的多個批處理命令

@echo off 

set Rfile= 
dir /b g:\health\test\ >> dir.txt 
For /F "tokens=1 delims=" %%y in (dir.txt) do Call :Read %%y 

:Read 

set Rfile=%~1 

For /F "tokens=1,2,3,4,5,6 delims=" %%a in (g:\health\test\%Rfile%) do Call :test %%a 

:test 
SET Machine=%~1 
SET BSOD=%~2 
SET NTFS=%~3 
SET DISK=%~4 
Set Workstation=%~5 
Set Server=%~6 


If NOT "%BSOD%" == "%Machine%" (

echo %machine% %BSOD% %NTFS% %DISK% %WorkStation% %Server% 

) 

:EOF 

這給了我這樣一個文件,這樣的信息具有下面的輸出。

計算機BSOD0 NTFS0 DISK0 Service0 Service0

測試」沒有空間,但測試是在輸出

我不想文件名的其餘部分線下(在這種情況下測試)輸出。我在做什麼錯在這裏?

文件信息 「計算機BSOD0 NTFS0 DISK0 Service0 Service0」

回答

0

您的問題是,您的FOR循環按預期呼叫:test,但是,一旦完成了FOR循環,無論如何您都將進入:test。如果你這樣做,那麼%1將作爲腳本的輸入(在這種情況下爲test)。

要解決,只需添加一個GOTO :eof像這樣:

For /F "tokens=1,2,3,4,5,6 delims=" %%a in (g:\health\test\%Rfile%) do Call :test %%a 

REM Do not fall through into the :test label code! 
GOTO :eof 

:test 
SET Machine=%~1 

順便說一句,你不應該有一個叫做:EOF標籤。已經定義了一個隱含的eof標籤。另外,您應該確保所有的子程序都以goto :eof結束。在這個例子中你只有1個子程序(:test),所以它工作正常,但如果你添加更多,你將會遇到問題。

+0

謝謝你在早上工作太早,在我的批次生鏽。 – 2013-02-19 13:36:08