2012-09-20 89 views
0

我在我的批處理文件中有一個輸出命令的日誌文件。
我想檢查這個文件,並檢查是否有錯誤。
這是該文件,錯誤的行:查看輸出日誌文件

9/20/2012 7:22:34 AM [Error] Error occured while reloading resource table: VALUE is duplicated

怎麼可以檢查嗎?
我嘗試以下方法:

for /f "tokens=4 %%x in (%TMPLog%) do 
    if "%%x"=="ERROR" SET err=TRUE 

,但它不工作。

回答

5

您可以更加容易:

findstr /l /c:"[Error]" "%TMPLog%" >nul 2>&1 && set err=1 

另一個隨機注:對於布爾變量,我往往有所定義的變量的模式時,它的真實,當它是假的沒有定義。然後你可以簡單地用if defined err來檢查它,這樣可以減少誤比較值的錯誤,並且可以在沒有延遲擴展的情況下正常工作(另一個常見的錯誤來源)。如果您想知道爲什麼我使用set err=1而不是set err=TRUE

+1

+1,TheAutoUpvoter :-) – jeb

+0

+1 - 您可能更喜歡將FINDSTR的輸出重定向到nul,因爲不需要查看輸出。 – dbenham

+0

確實如此。謝謝:) ...不知何故,它總是相同的四人frequenting批處理文件問題:D – Joey

2

喬伊爲您的問題提供了最簡單的解決方案。但他沒有解釋爲什麼你的代碼不起作用。

除非使用了parens,否則整個DO子句必須在一行上。

for /f ... do ... 

for /f .... do (
    ... 
) 

您的搜索條件也有缺陷。

您可以修復你正在尋找的字符串:

for /f "tokens=4" %%x in (%TMPLog%) do if "%%x"=="[ERROR]" SET err=TRUE 

或者你也可以解決你在哪裏尋找它的位置:

for /f "tokens=5" %%x in (%TMPLog%) do if "%%x"=="ERROR" SET err=TRUE 

但我還是在推薦喬伊的FINDSTR解決方案任何基於FOR的解決方案

+0

由於最初缺少格式化,我錯過了標記化。我理解它就像他們只是將第一個標記與'ERROR''比較,這聽起來與他們嘗試的非常不同。所以我的第一反應是「只給他們'findstr',並用它來做,而不是試圖長時間地解釋爲什麼'for'將不起作用」) – Joey

+0

我相信你在每個例子中都缺少雙引號。 ;) –

+0

是的,我是。謝謝。 – dbenham