检查错误级别的最佳方法

Best way to check 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 与上述字符串进行比较是否正确?

这是使用条件运算符 &&|| 的替代方法。它基于您之前的 post,这似乎与同一个问题 'the use of errorlevels'.

有关

条件运算符的工作方式有点像:

  • && 'if the previous command succeeded'
  • || 'if the previous command failed'.
@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 的默认值将保持不变。