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?


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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.