我想要这样的东西:- if %ERRORLEVEL% GEQ 1 && %ERRORLEVEL% neq 255 GOTO Not closed by user
。但是这种语法不起作用。
答案1
那这个呢?当然需要 XP 或更高版本...
if %errorlevel% GEQ 1 (
if %errorlevel% NEQ 255 goto :NotClosed
::other statements go here, if you need 'em
::don't forget to close the parenthesis on the last statement ->)
进一步澄清:
if %errorlevel% EQU 0 (
::commands you want to perform if 0 go here. Notice ->)
else (
::We got here because errorlevel was GEQ 1 or less than one...watch out
::if you program returns negative errorlevels!
if %errorlevel% NEQ 255 goto :NotClosed
::other statements go here. But don't forget the parenthesis ->)
答案2
为了完整起见,以下是JP Software 的 TCC/LE(也可以运行此类脚本的命令解释器),它支持 JSanchez 答案中的语法,以实现向下兼容,但也有自己的两个更好的替代方案。
替代方案是……
… 它自己的多行iff
命令
iff %ERRORLEVEL% GE 1 then
iff %ERRORLEVEL% NE 255 then
goto :NotClosedByUser
endiff
endiff
使用括号复合命令时iff
,不必担心变量扩展“太快”发生。
… 带有逻辑运算符的复合表达式
if %ERRORLEVEL% GE 1 .and. %ERRORLEVEL% NE 255 goto NotClosedByUser
这样做的好处是几乎与问题中想要的完全相同。TCC 甚至支持GEQ
和NEQ
兼容性。是的,它不需要goto
命令中的冒号。