从失败的查找命令中设置错误级别的批处理编程



我发现需要向调用批处理脚本的程序报告错误级别。

脚本将创建一个我想检查的CSV日志文件,以显示脚本是否成功运行。

我想说的是

IF NOT FIND "[ERR" "test.csv"

或说,如果字符串"[ERR"不在输出ERRORLEVEL = 0 ELSE ERRORLEVEL = 1

希望这是有道理的。我敢肯定这很简单,但是设置错误级别似乎是$ SE!

中的皇家痛苦。

查找" [err" text.csv"如果找到至少一个 [ERR,则将errorlevel设置为0,如果找不到 [ERR,则将erryLevel设置为0。您需要一种倒转逻辑的方法。

如果您想做的所有要做的是如果找不到[ERR,请立即返回0,如果找到了至少一个[ERR,请使用1,则我将使用以下内容:

find "[ERR" "test.csv" >nul && exit /b 1 || exit /b 0

如果要在以后返回的变量中捕获结果,则:

find "[ERR" "test.csv" >nul && set "err=1" || set "err=0"

find "[ERR" "test.csv" >nul
set /a "err=!%errorlevel%"

准备返回结果

exit /b %err%

以下是我最初的答案,但令人尴尬地错误 :-(
感谢Corey指出逻辑错误。正如他在评论中所说的那样,下面的错误代码只有在所有行带有[ERR文本时才报告错误。

查找将把错误度设置为0,如果发现,则将错误设置为1,如果找不到1。扭转 逻辑,只需使用/v选项。

find /v "[ERR" "test.csv" >nul

如果您的变量集指示了errorlevel,则可以 使用退出/b设置ErrorLevel

set err=1
exit /b %err%

请注意,如果errorlevel 大于或等于以下数字,则该命令具有返回true的逻辑!所以

IF ERRORLEVEL 0 (...

返回所有查找命令。如果您只想测试文件中的短语,则需要什么:

find "string" "test.txt" > NUL & IF NOT ERRORLEVEL 1 ECHO String was found

花了我很长时间来解决这个问题!

这是我之前在BAT文件中使用的逻辑。

find "string" "test.txt" > NUL & IF ERRORLEVEL 1 (
    ECHO String was NOT found
) ELSE (
    ECHO String was found
)

您可以将您想要的任何命令放入IF/else Blocks中。

最新更新