2

Я хочу что-то вроде этого:- if %ERRORLEVEL% GEQ 1 && %ERRORLEVEL% neq 255 GOTO Not closed by user . Но этот синтаксис не работает.

2 ответа2

3

Как насчет этого? Требуется 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 ->)
1

Для полноты приведем ответ для 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 .

дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .