Я пытаюсь связать ряд .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
C:\>
Использование 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
C:\>
Как я могу выйти из a.bat, чтобы a.bat && b.bat
и a.bat || b.bat
вели себя как ожидалось?
Все команды запускаются в cmd.exe в Windows XP SP3.