我发现需要向调用批处理脚本的程序报告错误级别。
该脚本将创建一个CSV日志文件,我想检查该文件以显示脚本是否成功运行。
我想说的是
IF NOT FIND "[ERR" "test.csv"
或者说,如果字符串"[ERR"
不在输出ERRORLEVEL = 0 ELSE ERRORLEVEL = 1
希望这是有道理的。我确信它很简单,但设置错误级别似乎是a $ se中的王室痛苦!
答案 0 :(得分:10)
FIND“[ERR”“text.csv”如果找到至少一个[ERR
则将ERRORLEVEL设置为0,如果未找到[ERR
则设置为1。你需要一种方法来反转逻辑。
如果您只想找到[ERR
,则立即返回0;如果找到至少一个1
,则立即返回[ERR
,那么我将使用以下内容:
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
文本,下面的错误代码只会报告错误。
如果找到,FIND会将ERRORLEVEL设置为0,如果未找到则设置为1。扭转 逻辑,只需使用/ V选项。
find /v "[ERR" "test.csv" >nul
如果你有一个指示错误级别的变量集,那么你可以 使用EXIT / B设置ERRORLEVEL
set err=1 exit /b %err%
答案 1 :(得分:2)
请注意,如果ERRORLEVEL 大于或等于以下数字,则IF命令具有返回true的逻辑!所以
IF ERRORLEVEL 0 (...
对于所有FIND命令,返回true。如果您只想测试短语是否在文件中,您需要什么:
find "string" "test.txt" > NUL & IF NOT ERRORLEVEL 1 ECHO String was found
花了我很多时间来解决这个问题!
答案 2 :(得分:1)
这是我之前在BAT文件中使用的逻辑。
find "string" "test.txt" > NUL & IF ERRORLEVEL 1 (
ECHO String was NOT found
) ELSE (
ECHO String was found
)
您可以在IF / ELSE块中放置您想要的任何命令。