0

我的批处理文件中有一个带有命令输出的日志文件。
我想查看此文件并检查是否有错误。
这是该文件的错误行:

2012 年 9 月 20 日上午 7:22:34 [错误] 重新加载资源表时发生错误:VALUE 重复

我怎样才能检查它?
我尝试以下方法:

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

但它不起作用。

4

2 回答 2

5

您可以轻松得多:

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

另一个随机注释:对于布尔变量,我倾向于在它为真时定义变量的模式,而在它为假时未定义。然后你可以简单地检查它,if defined err它可以减少错误输入比较值的错误,并且在没有延迟扩展的情况下在块中正常工作(另一个常见的错误来源)。只是如果你想知道为什么我使用set err=1而不是set err=TRUE.

于 2012-09-20T10:59:20.530 回答
2

Joey 为您的问题提供了最简单的解决方案。但他没有解释为什么你的代码不起作用。

除非使用括号,否则整个 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

但我仍然推荐 Joey 的 FINDSTR 解决方案,而不是任何基于 FOR 的解决方案。

于 2012-09-20T12:19:18.087 回答