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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top