Wie überprüfe ich den Exit-Code des letzten Befehls in der Batch-Datei?

69

In einer Batch-Datei unter Windows verwende ich 7-zip wie folgt :

...\right_path\7z a output_file_name.zip file_to_be_compressed

Wie kann ich den Beendigungscode von überprüfen 7zund die entsprechenden Maßnahmen ergreifen?

Mischa Moroschko
quelle
1
Auch bei Stackoverflow gefragt: Wie
Deanna

Antworten:

78

Auf Rückkehrcode größer oder gleich 1 prüfen:

if ERRORLEVEL 1 echo Error

oder

if %ERRORLEVEL% GEQ 1 echo Error

oder auf einen Rückkehrcode gleich 0 testen:

if %ERRORLEVEL% EQU 0 echo OK

Sie können andere Befehle verwenden, z. B. GOTOwo ich zeige echo.

Dennis Williamson
quelle
Ich habe deinen Code ausprobiert. Ich habe den folgenden Fehler erhalten:0 was unexpected this time.
Misha Moroshko
2
@ Mischa: Vielleicht hast du es mit den Prozentzeichen versucht, so wie ich es ursprünglich gepostet habe. Versuchen Sie es ohne sie oder versuchen Sie die anderen Versionen, die ich hinzugefügt habe.
Dennis Williamson
2
Es wurden Fälle gefunden, in denen %ERRORLEVEL%0 ist, obwohl ein Fehler aufgetreten ist. Passiert beim Einchecken %ERRORLEVEL%einer cmd-Datei. Der Versuch start /waithat nicht funktioniert. Das einzige, was funktioniert hat, istif errorlevel 1 (...)
AlikElzin-kilaka
4
Beachten Sie, dass errorlevel keine Umgebungsvariable ist . Hier ist eine gute Zusammenfassung der Fallstricke und Feinheiten .
Nick Westgate
Darf ich vorschlagen , negative Rückkehrcodes zu erkennen , NEQanstatt sie EQUzu unterstützen? Keine Ahnung, ob Windows XP das tut, aber es ist eine Sache auf modernen Windows ...
binki
10

Das funktioniert wirklich, wenn Sie Folgendes haben: App1.exe ruft -> .bat auf, was ausgeführt wird -> app2.exe

App2 gibt Fehlerlevel 1 zurück, aber Sie müssen das in der .bat-Datei abfangen und es erneut auf app1 auslösen, sonst frisst .bat die Fehlerlevel und app1 weiß es nie.

Methode:

In .bat:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

Dies ist eine Prüfung nach App2 auf Fehlerlevel. Wenn> 0, wird die .bat-Datei beendet und die Fehlerstufe für die aufrufende App1 auf 1 gesetzt.

Sam Jones
quelle
4
Es könnte sogar noch besser sein, wenn Sie denselben Fehler an app1 zurücksenden. Ich versuche , nicht diese, aber es sollte funktionieren: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic
2
Zumindest in Windows kann% ERRORLEVEL% eine negative Zahl sein (z. B. habe ich ein Programm, das bei Fehlern -1 zurückgibt). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%könnte eine bessere Option sein. Aber Sie müssen wirklich wissen, was das Programm bei Fehlern zurückgibt. Einige Programme geben für bestimmte Erfolgsarten bestimmte Codes ungleich Null zurück.
Euro Micelli
Wenn app2 das letzte ist, was Sie in der bat-Datei ausführen, wird der Fehlercode weitergegeben.
AnrDaemon