我的批处理文件中有一个带有命令输出的日志文件。
我想查看此文件并检查是否有错误。
这是该文件的错误行:
2012 年 9 月 20 日上午 7:22:34 [错误] 重新加载资源表时发生错误:VALUE 重复
我怎样才能检查它?
我尝试以下方法:
for /f "tokens=4 %%x in (%TMPLog%) do
if "%%x"=="ERROR" SET err=TRUE
但它不起作用。
我的批处理文件中有一个带有命令输出的日志文件。
我想查看此文件并检查是否有错误。
这是该文件的错误行:
2012 年 9 月 20 日上午 7:22:34 [错误] 重新加载资源表时发生错误:VALUE 重复
我怎样才能检查它?
我尝试以下方法:
for /f "tokens=4 %%x in (%TMPLog%) do
if "%%x"=="ERROR" SET err=TRUE
但它不起作用。
您可以轻松得多:
findstr /l /c:"[Error]" "%TMPLog%" >nul 2>&1 && set err=1
另一个随机注释:对于布尔变量,我倾向于在它为真时定义变量的模式,而在它为假时未定义。然后你可以简单地检查它,if defined err
它可以减少错误输入比较值的错误,并且在没有延迟扩展的情况下在块中正常工作(另一个常见的错误来源)。只是如果你想知道为什么我使用set err=1
而不是set err=TRUE
.
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 的解决方案。