批处理编程从失败的FIND命令设置ERRORLEVEL

Fre*_*zer 8 error-handling batch-file errorlevel

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

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

我想说的是类似的东西

IF NOT FIND "[ERR" "test.csv"
Run Code Online (Sandbox Code Playgroud)

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

希望这是有道理的.我确信它很简单,但设置错误级别似乎是一个皇家的痛苦!

dbe*_*ham 11

查找"[ERR""text.csv"如果[ERR找到至少一个,则将ERRORLEVEL设置为0,如果找不到,则设置[ERR为1 .你需要一种方法来反转逻辑.

如果你想要做的就是在没有[ERR找到的情况下立即返回0 ,或者1如果[ERR找到至少一个,那么我将使用以下内容:

find "[ERR" "test.csv" >nul && exit /b 1 || exit /b 0
Run Code Online (Sandbox Code Playgroud)

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

find "[ERR" "test.csv" >nul && set "err=1" || set "err=0"
Run Code Online (Sandbox Code Playgroud)

要么

find "[ERR" "test.csv" >nul
set /a "err=!%errorlevel%"
Run Code Online (Sandbox Code Playgroud)

当您准备返回结果时

exit /b %err%
Run Code Online (Sandbox Code Playgroud)

下面是我接受的原始答案,但令人尴尬的错误 :-(
感谢Corey指出逻辑错误.正如他在评论中所说,如果所有行都有[ERR文本,下面的错误代码将只报告错误.

如果找到,FIND将ERRORLEVEL设置为0,如果未找到则设置为1.要反转逻辑,只需使用/ V选项.

find /v "[ERR" "test.csv" >nul
Run Code Online (Sandbox Code Playgroud)

如果你有一个指示errorlevel的变量集,那么你可以使用EXIT/B来设置ERRORLEVEL

set err=1
exit /b %err%
Run Code Online (Sandbox Code Playgroud)

  • dbenham!经过这个再次,我发现我做了什么是DOS男生错误!我把set err = 1而不是err = 1.对于阅读此内容的任何人来说,这意味着,当您键入SET ERR = 1时,变量名称为"ERR"而不是"ERR".谢谢! (2认同)