检查错误级别的最佳方法
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%
所以如果findstr命令成功,即至少有一个字符串匹配,它将执行set
命令,即定义错误编号值。如果 findstr
命令失败, 即两个字符串都不匹配 ,set
命令也无法定义错误编号值,这意味着第二个 findstr
命令将是 运行。如果第二个 findstr
命令与字符串不匹配,错误编号值将为 set
,否则 0
的默认值将保持不变。
我正在编写批处理脚本,以便在 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%
所以如果findstr命令成功,即至少有一个字符串匹配,它将执行set
命令,即定义错误编号值。如果 findstr
命令失败, 即两个字符串都不匹配 ,set
命令也无法定义错误编号值,这意味着第二个 findstr
命令将是 运行。如果第二个 findstr
命令与字符串不匹配,错误编号值将为 set
,否则 0
的默认值将保持不变。