Ich bevorzuge die OR-Befehlsform, da ich sie am lesbarsten finde (als im Gegensatz zu einem "if" nach jedem Befehl). Allerdings ist die naive Art der dies zu tun, command || exit /b %ERRORLEVEL%
es falsch .
Dies liegt daran, dass die Batch-Variablen beim ersten Lesen einer Zeile expandiert werden, anstatt und nicht, wenn sie verwendet werden. Das bedeutet, dass wenn die command
auf der Linie scheitert, wird die Batchdatei zwar ordnungsgemäß beendet, aber mit dem Rückgabewert 0, denn das ist der Wert von %ERRORLEVEL%
war zu Beginn des Linie. Offensichtlich ist dies in unserem Skript unerwünscht, daher müssen wir verzögerte Expansion , etwa so:
SETLOCAL EnableDelayedExpansion
command-1 || exit /b !ERRORLEVEL!
command-2 || exit /b !ERRORLEVEL!
command-3 || exit /b !ERRORLEVEL!
command-4 || exit /b !ERRORLEVEL!
Dieses Snippet führt die Befehle 1-4 aus, und wenn einer von ihnen fehlschlägt, wird es mit demselben Exit-Code wie der fehlgeschlagene Befehl beendet.