Prefiero la forma OR de comando, ya que los encuentro más legibles (en lugar de tener un if después de cada comando). Sin embargo, la forma ingenua de hacer esto command || exit /b %ERRORLEVEL%
está mal .
Esto se debe a que el lote expande las variables cuando se lee una línea por primera vez, en lugar de cuando se están utilizando. Esto significa que si command
falla la línea de arriba, el archivo por lotes sale correctamente, pero sale con el código de retorno 0, porque ese es el valor de %ERRORLEVEL%
al comienzo de la línea. Obviamente, esto no es deseable en nuestro script, por lo que debemos habilitar
la expansión retrasada , así:
SETLOCAL EnableDelayedExpansion
command-1 || exit /b !ERRORLEVEL!
command-2 || exit /b !ERRORLEVEL!
command-3 || exit /b !ERRORLEVEL!
command-4 || exit /b !ERRORLEVEL!
Este fragmento ejecutará los comandos 1-4, y si alguno de ellos falla, saldrá con el mismo código de salida que el comando que falló.