Dos inline IF test для уровня ошибки, без использования отложенного расширения

Есть ли в любом случае сделать ниже без задержки расширения (одна строка, разорвана для удобства чтения)?

%comspec% /v:on /c %windir%\System32\reg.exe import c:\temp\test.reg &
 if !errorlevel! neq 0 pause

Если бы это было эхо, я знаю, что call может быть использован, но, кажется, не доступен для использования с if,

2 ответа

Решение

Одним из способов является использование этого старого синтаксиса:

%comspec% ... & if errorlevel 1 pause

В этом случае особый вариант if используется оператор, который проверяет текущее состояние уровня ошибки.

Другой вариант может быть таким:

%comspec% ... || pause

|| разделитель команд примерно эквивалентен & if !errorlevel! neq 0т.е. последующая команда выполняется только в том случае, если предыдущая команда оканчивалась ненулевым кодом выхода.

Вы можете использовать условное исполнение: reg.exe import c:\temp\test.reg || pause
|| означает выполнить при ошибке (т. е. уровень ошибки neq 0).

Вы можете также попробовать этот пример, чтобы увидеть, как он работает:

find "this" && echo found || echo not found - он будет информировать вас, если это было во входном потоке (ввод с клавиатуры, если вы не перенаправили).

Другие вопросы по тегам