9

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

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

我想说的是

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

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

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

4

3 回答 3

11

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%
于 2012-10-23T15:01:16.283 回答
3

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

IF ERRORLEVEL 0 (...

对所有 FIND 命令返回 true。如果您只想测试一个短语是否在文件中,您需要什么:

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

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

于 2017-08-04T09:53:16.983 回答
1

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

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

您可以在 IF/ELSE 块中放置您想要的任何命令。

于 2015-11-12T00:21:29.657 回答