Я предпочитаю ИЛИ форму команды, так как считаю их наиболее читабельными
против наличия if после каждой команды). Тем не менее, наивный способ
при этом command || exit /b %ERRORLEVEL%
это неправильно .
Это потому, что пакет расширяет переменные при первом чтении строки, а
чем когда они используются. Это означает, что если command
в строке
выше не удается, пакетный файл завершается правильно, но он завершается с кодом возврата 0,
потому что это то, что значение %ERRORLEVEL%
было в начале
линия. Очевидно, что это нежелательно в нашем скрипте, поэтому мы должны включить
отложенное расширение , вот так:
SETLOCAL EnableDelayedExpansion
command-1 || exit /b !ERRORLEVEL!
command-2 || exit /b !ERRORLEVEL!
command-3 || exit /b !ERRORLEVEL!
command-4 || exit /b !ERRORLEVEL!
Этот фрагмент будет выполнять команды 1-4, и если какая-либо из них завершится ошибкой, он выполнит
завершиться с тем же кодом завершения, что и с ошибочной командой.