我正在编写要在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作为如上所述的字符串是否正确?
答案 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%
因此,如果findstr命令成功执行,则至少有一个字符串被匹配,它将执行set
命令,即。定义错误号值。如果findstr
命令失败,则如果两个字符串都不匹配,则set
命令也将无法定义错误号值,这意味着将运行第二个findstr
命令。如果第二个findstr
命令与字符串不匹配,则错误号值为set
,否则默认值0
将保留不变。