Я хочу что-то вроде этого:- if %ERRORLEVEL% GEQ 1
&& %ERRORLEVEL% neq 255 GOTO Not closed by user
. Но этот синтаксис не работает.
2 ответа
Как насчет этого? Требуется 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 ->)
Для полноты приведем ответ для TCC /LE компании JP Software (интерпретатор команд, который также может запускать такие сценарии), который поддерживает синтаксис из ответа 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
.
дальнейшее чтение
- JP Software. IFF. Возьмите Command / TCC Help.
- JP Software. Условные выражения. Возьмите Command / TCC Help.