我发现需要向调用批处理脚本的程序报告错误级别。
该脚本将创建一个我想要检查的 CSV 日志文件,以显示脚本是否成功运行。
我想说的是
IF NOT FIND "[ERR" "test.csv"
或者说,如果字符串"[ERR"
不在输出中ERRORLEVEL = 0 ELSE ERRORLEVEL = 1
希望这是有道理的。我敢肯定这很简单,但设置错误级别似乎是 a$se 的一大难题!
我发现需要向调用批处理脚本的程序报告错误级别。
该脚本将创建一个我想要检查的 CSV 日志文件,以显示脚本是否成功运行。
我想说的是
IF NOT FIND "[ERR" "test.csv"
或者说,如果字符串"[ERR"
不在输出中ERRORLEVEL = 0 ELSE ERRORLEVEL = 1
希望这是有道理的。我敢肯定这很简单,但设置错误级别似乎是 a$se 的一大难题!
FIND "[ERR" "text.csv" 如果至少找到一个,则将 ERRORLEVEL 设置为 0 [ERR
,如果没有找到,则设置为 1 [ERR
。您需要一种反转逻辑的方法。
如果您只想在没有[ERR
找到或1
至少[ERR
找到一个时立即返回 0,那么我将使用以下命令:
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 来设置错误级别
set err=1 exit /b %err%
请注意,如果 ERRORLEVEL大于或等于以下数字,则 IF 命令具有返回 true 的逻辑!所以
IF ERRORLEVEL 0 (...
对所有 FIND 命令返回 true。如果您只想测试一个短语是否在文件中,您需要什么:
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 块中放置您想要的任何命令。