2014-04-28 113 views
0

我對批處理腳本編程相對陌生, 我需要一個腳本,它循環訪問具有3個日誌文件的目錄並檢查錯誤和警告。我不太清楚循環位。 我寫了一個小的代碼..幫我糾正它...如何使用批處理腳本循環遍歷目錄中的文件

for %%a IN ("C:\Program Files (x86)\<installloc>\*.log*") 
do 
findstr /c:"0 Warnings" %%a 
set result1=%errorlevel% 

findstr /c:"0 NonFatalErrors" %%a 
set result2=%errorlevel% 

findstr /c:"0 FatalErrors" %%a 
set result3=%errorlevel% 
done 


if %result1% & %result2% & %result3% EQU 0 
(
exit 0 
) else (
exit 1 
) 
+1

你應該更多地解釋你到目前爲止所嘗試的以及你遇到的具體問題。在這裏發佈你的代碼,這樣別人可以爲你修復它不起作用。 –

回答

0

這是我認爲你正在嘗試做的

for %%a IN ("C:\Program Files (x86)\<installloc>\*.log*") do (
    for %%b in (Warnings NonFatalErrors FaltalErrors) do (
     findstr /l /c:"0 %%b" "%%~fa" 
     if errorlevel 1 exit /b 1 
    ) 
) 
exit /b 0 

這將搜索文件夾中的所有文件對於任何指示的字符串。如果其中任何一個未找到,則退出時出現錯誤級別1.如果在所有文件中都找到所有字符串,則退出時出錯級別爲0

如果您有10 Warnings(示例),則此代碼將失敗,因爲搜索到的文本被發現。搜索字符串必須根據實際文件內容更好地定義。或者,如果搜索文本位於該行的開頭,則可以將/b添加到findstr命令中,以指示匹配應發生在該行的開頭。

在原來的代碼存在一些問題:

在批處理文件,右括號在for命令(for ... in (set))的集合必須在同一行的是,do關鍵字和行的塊中的for命令(如果有多個)必須用括號括起來,因此解析器可以知道哪些行將被重複使用。此塊的左括號必須與do關鍵字的行相同。

另外,AND運營商在批量if命令中沒有。如果你想保持原來的sintax,應該寫成

if condition if condition if condition command 

,然後,命令將只在三個條件評價爲真執行。

相關問題