Warum hat cmd.exe unterschiedliches Verhalten auf Errorlevel eine 64-Bit-Maschine?
-
20-09-2019 - |
Frage
Wenn ich eine Batch-Skript namens temp.bat machen (zum Beispiel) enthalten:
exit /b 1
Wenn ich es auf verschiedene Weise ausgeführt werden, erhalte ich eine anderes Verhalten auf meinem 32-Bit-XP-System im Vergleich zu einem 64-Bit-XP-System.
Auf 32-Bit:
> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
0
Auf 64-Bit:
> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
1
Ich habe durch die cmd.exe Optionen gesucht und ich habe es nicht gelungen, alle Optionen finden steuern, wie es Errorlevel Informationen aus Batch-Skripten ausbreitet. An diesem Punkt bin ich nicht in der Lage jede rationale Erklärung für diesen Unterschied zu finden.
Lösung
Sie haben mit Ausgang / b vorsichtig sein, da es eigentlich nicht richtig funktioniert in allen Fällen. Zum Beispiel:
temp.bat&&echo 0||echo 1
Wenn temp.bat enthält exit / b 1 Sie würden 1 erwarten gedruckt werden, aber es ist nicht. Leider wirklich die einzige Möglichkeit, einen Arbeits Exit-Code für eine Batch-Datei festgelegt, ist die Verwendung @%COMSPEC% /C exit 1
als letzte Zeile in der Batch-Datei
Andere Tipps
Das Problem mit Anders 'Beispiel ist, dass es eine .bat-Datei verwendet. Wenn Sie eine .cmd-Datei verwenden, Ausgang arbeitet als dokumentiert.
Der Hauptpunkt sowohl .bat des Habens und .cmd Dateien scheint die Abwärtskompatibilität zu sein: wenn es eine BAT-Datei ausgeführt wird, cmd versucht, den Pre-NT CLI zu emulieren, command.com, die viele einfachere Fehlerbehandlung hatte.
zumindest das ist meine Vermutung. Ich auf diesem Thread gestolpert, während für offizielle Dokumente auf der .bat / .cmd Sache googeln, die ich nicht zu finden scheinen kann.