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
- он будет информировать вас, если это было во входном потоке (ввод с клавиатуры, если вы не перенаправили).