我的批处理文件中有一个带有命令输出的日志文件 我想查看此文件并检查是否有错误 这是此文件的行,包含错误:
9/20/2012 7:22:34 AM [错误]重新加载资源表时出错:VALUE重复
我该怎么检查呢? 我尝试以下方法:
for /f "tokens=4 %%x in (%TMPLog%) do
if "%%x"=="ERROR" SET err=TRUE
但它不起作用。
答案 0 :(得分:5)
你可以更容易:
findstr /l /c:"[Error]" "%TMPLog%" >nul 2>&1 && set err=1
另一个随机注释:对于布尔变量,我倾向于在变量为真时定义变量的模式,而在变量为假时则不定义。然后你可以简单地用if defined err
来检查它,这可以减少错误输入比较值的错误,并且可以在没有延迟扩展的块中正常工作(另一个常见的错误来源)。如果您想知道为什么我使用set err=1
代替set err=TRUE
。
答案 1 :(得分:2)
Joey为您的问题提供了最简单的解决方案。但他没有解释为什么你的代码不起作用。
除非使用了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
但我仍然推荐Joey的FINDSTR解决方案而不是任何基于FOR的解决方案。