检查错误级别的最佳方法

时间:2019-07-03 15:57:36

标签: windows batch-file findstr errorlevel

我正在编写要在Win 10 OS中运行的批处理脚本。但是,我在检查Windows命令存在状态的错误级别时遇到问题。我决定使用以下方法:

findstr /I /C:"EXIT_FAILURE" /I /C:"UNKNOWN" file 
if '%ERRORLEVEL%'=='0' goto CHECKFAILED

findstr /I /C:"EXIT_SUCCESS" file 
if '%ERRORLEVEL%'!='0' goto CHECKFAILED

exit /B 0

:CHECKFAILED
exit /B 2

这是检查的正确方法吗-我的意思是比较错误级别为字符串还是在单引号内使用?

验证其数值后的错误级别会导致理解该命令提供的注意事项:

if ERRORLEVEL 0

对于ERRORLEVEL> = 0表示TRUE。同样,还有其他考虑因素。

因此,使用?&比较ERRORLEVEL作为如上所述的字符串是否正确?

1 个答案:

答案 0 :(得分:1)

这是使用条件运算符&&||的另一种方法。它基于您以前的帖子,该帖子似乎与同一问题'使用错误级别'有关。

条件运算符的工作方式类似于:

  • &&'如果上一个命令成功执行'
  • ||'如果先前的命令失败'。
@Echo Off
If "%~4"=="" Exit /B 1
If Not Exist "%~3" Exit /B 1
If Not Exist "%~2\%~1" Exit /B 1
If Not Exist "%__APPDIR__%findstr.exe" Exit /B 1

Set "arg1=%~1"
Set "logfile=%~3\%~4.%arg1:.=_%.res"

Copy /V /Y "%~2\%~1" "%logfile%" 1>NUL 2>&1 || Exit /B 1

Set "findstr=%__APPDIR__%findstr.exe"
Set "errno=0"

"%findstr%" /I "EXIT_FAILURE UNKNOWN" "%logfile%" 1>NUL 2>&1 && (Set "errno=2"
) || "%findstr%" /I "PASS" "%logfile%" 1>NUL 2>&1 || Set "errno=2"

Exit /B %errno%

因此,如果命令成功执行,则至少有一个字符串被匹配,它将执行set命令,即。定义错误号值。如果findstr命令失败,则如果两个字符串都不匹配,则set命令也将无法定义错误号值,这意味着将运行第二个findstr命令。如果第二个findstr命令与字符串不匹配,则错误号值为set,否则默认值0将保留不变。