Я пытаюсь объединить последовательность файлов .bat с помощью команды EXIT /B X
для возврата успеха или неудачи и &&
и ||
для условного запуска следующего .bat (например, a.bat && b.bat
).
Независимо от того, позвоню ли я EXIT /B 0
или как-нибудь еще, чтобы закончить a.bat, a.bat && b.bat
позже вызовет b.bat. Насколько я понимаю, EXIT /B 0
должен установить ERRORLEVEL=0
, что является успехом, поэтому &&
следует продолжить. В противоположность этому, вызов EXIT /B 1
должен установить ERRORLEVEL=1
, что является ошибкой, поэтому &&
должен прекратиться. Что мне здесь не хватает?
Тривиальный пример:
Для не пакетных команд, действующих как ожидалось:
C:\> echo test|findstr test>NUL && echo yes
yes
C:\> echo test|findstr test>NUL || echo yes
C:\> echo test|findstr nope>NUL && echo yes
C:\> echo test|findstr nope>NUL || echo yes
yes
Использование EXIT /B
всегда считает a.bat успешным:
C:\> echo @EXIT /B 0 > a.bat
C:\> a.bat && echo yes
yes
C:\> a.bat || echo yes
C:\> echo @EXIT /B 1 > a.bat
C:\> a.bat && echo yes
yes
C:\> a.bat || echo yes
Как выйти из a.bat, чтобы a.bat && b.bat
и a.bat || b.bat
вели себя как положено?
Все команды выполняются в cmd.exe в Windows XP SP3.