Я пытаюсь связать серию файлов .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.
the page you requested cannot be found
(но три голоса говорят, что это только я ...) Другое описание находится на SS64 - person Stephan   schedule 22.08.2018