Was ist ein Errorlevel?

In Microsoft Windows und MS-DOS ist ein Fehlerlevel die Ganzzahl, die von einem untergeordneten Prozess zurückgegeben wird, wenn er beendet wird.

Errorlevel ist 0, wenn der Prozess erfolgreich war.

Errorlevel ist 1 oder höher, wenn der Prozess einen Fehler festgestellt hat.

Das Testen des Errorlevels ist hilfreich, wenn Sie eine Reihe von Befehlen entweder in der Befehlszeile oder in einer Batchdatei ausführen.

Mit einem Bedingungsausdruck können Sie eine Reihe von Befehlen angeben, die nur dann ausgeführt werden sollen, wenn ein vorheriger Befehl erfolgreich war. Sie können auch auf Fehler testen und Befehle nur ausführen, wenn der vorherige Befehl fehlgeschlagen ist. Wenn das Programm dies unterstützt, können Sie manchmal auch nach bestimmten Arten von Fehlern suchen.

Sie können die Befehlsausführung auch verzweigen, so dass ein anderer Befehlssatz ausgeführt wird, wenn der vorherige Befehl fehlgeschlagen ist.

Bedingt "if [nicht] errorlevel"

Der Bedingungsausdruck " if errorlevel n " ist wahr, wenn der Errorlevel größer oder gleich n ist .

In ähnlicher Weise ist " wenn nicht errorlevel n " wahr, wenn der errorlevel kleiner als n ist .

Betrachten wir einige Beispiele, wie diese verwendet werden können, indem einige Befehle in der Windows-Befehlszeile ausgeführt werden.

Öffnen Sie zunächst ein Eingabeaufforderungsfenster: Drücken Sie Win + X (halten Sie die Windows-Taste gedrückt und drücken Sie X ), und wählen Sie Eingabeaufforderung .

Lassen Sie uns nun einen einfachen Befehl ausführen:

 mkdir-Verzeichnis 

Wenn wir mkdir ausführen (vorausgesetzt, es gibt noch kein Verzeichnis mit dem Namen "mydirectory" im aktuellen Verzeichnis), wird das Verzeichnis mydirectory erstellt. Der Befehl war erfolgreich. Wenn mkdir beendet wird, wird der Errorlevel auf 0 gesetzt .

Lassen Sie uns den Errorlevel 0 testen.

Erfolg beim Testen: "Wenn nicht Fehlerlevel"

Wir können mit der Bedingungsanweisung auf errorlevel 0 (success) testen, wenn nicht errorlevel 1 . Wenn dies wahr ist (errorlevel ist weniger als 1), wird der Befehl ausgeführt, der auf die Bedingung folgt. In den folgenden Beispielen verwenden wir den Befehl echo, um eine Nachricht auf dem Bildschirm zu drucken.

 Wenn nicht errorlevel 1 echo Der letzte Befehl war erfolgreich. 
 Der letzte Befehl war erfolgreich. 

Wie bereits erwähnt, war der Befehl mkdir, den wir oben ausgeführt haben, erfolgreich.

Wenn wir jedoch versuchen, das Verzeichnis erneut zu erstellen, schlägt mkdir fehl, da das Verzeichnis- Verzeichnis bereits existiert:

 mkdir-Verzeichnis 
 Ein Unterverzeichnis oder ein Dateibeispiel ist bereits vorhanden. 

Wenn mkdir fehlschlägt, gibt es eine eigene Fehlermeldung "Ein Unterverzeichnis oder ein Beispiel für eine Datei ist bereits vorhanden" an und setzt den Errorlevel auf 1. Wenn wir unsere Bedingungsanweisung erneut ausführen:

 Wenn nicht errorlevel 1 echo Der letzte Befehl war erfolgreich. 

Nichts passiert. Unser Echo- Befehl wird nicht ausgeführt, weil wir den Erfolg getestet haben - Fehlerebene kleiner als 1 - und diese Bedingung ist falsch.

Testfehler: "Wenn Fehlerlevel"

Wir können mit if errorlevel 1 speziell auf Fehler testen, was true zurückgibt, wenn der errorlevel 1 oder größer ist.

 if errorlevel 1 echo Der letzte Befehl ist fehlgeschlagen. 
 Der letzte Befehl ist fehlgeschlagen. 

Die Bedingung ist erfüllt (weil mkdir zuvor den errorlevel auf 1 gesetzt hat) und der Befehl echo ausgeführt wird. Es würde auch laufen, wenn der Errorlevel 2, 3, 4 usw. wäre. Wenn der Errorlevel 0 war, würde er nicht ausgeführt.

Verzweigungsausführung mit if..else

In den obigen Beispielen haben wir den Erfolg oder Misserfolg getestet, jedoch nicht beides.

Wir können sowohl den Erfolg als auch den Misserfolg testen, indem Sie die if / else-Anweisung des Formulars verwenden:

 if [ not ] errorlevel n ( Befehl1 ) else ( Befehl2 ) 

Hinweis: Die Klammern sind erforderlich, um die Befehle von den anderen Wörtern zu trennen.

Zum Beispiel:

 mkdir newtest 
 Wenn nicht Errorlevel 1 (Echo Success), sonst (Echo Failure) 
 Erfolg 
 mkdir newtest 
 Ein Unterverzeichnis oder eine Datei newtest ist bereits vorhanden. 
 Wenn nicht Errorlevel 1 (Echo Success), sonst (Echo Failure) 
 Fehler 

Umgebungsvariable% ERRORLEVEL%

Oft wird der Errorlevel auch in der Umgebungsvariablen % ERRORLEVEL% gespeichert. Der Wert ist eine bequeme Möglichkeit, auf Ihre aktuelle Fehlerebene zuzugreifen.

Im folgenden Beispiel führen wir den Befehl dir zweimal, einmal erfolgreich und einmal erfolglos aus. Nach jedem Echo wird der Wert von % ERRORLEVEL% angezeigt .

 mkdir beispiel 
 dir Beispiel 
 Verzeichnis von C: \ Users \ Hope \ example 06/10/2018 21:43 PM. 06/10/2018 09:43 PM .. 0 Datei (en) 0 Bytes 2 Dir (s) 50.671.132.672 Bytes frei 
 echo% ERRORLEVEL% 
 0 
 du falsch geschrieben 
 Verzeichnis von C: \ Users \ Hope-Datei nicht gefunden 
 echo% ERRORLEVEL% 
 1 

Verwendung von% ERRORLEVEL% in Bedingungen

Sie können % ERRORLEVEL% in Bedingungen verwenden, zum Beispiel:

 Wenn% ERRORLEVEL% NEQ 0 echo Errorlevel ungleich Null ist, ist der letzte Befehl fehlgeschlagen. 

Tipp: NEQ ist der Vergleichsoperator, der "ungleich" bedeutet.

Hinweis:% ERRORLEVEL% ist nicht immer korrekt

% ERRORLEVEL% ist nicht gleich Error Level, und die beiden Werte sind nicht immer gleich. Insbesondere wird % ERRORLEVEL% nicht immer aktualisiert, wenn sich der Fehlerspiegel ändert. Weitere Informationen finden Sie in diesem MSDN-Blogbeitrag von Raymond Chen.

Wenn Sie den Errorlevel in einer Produktionsumgebung testen, ist es daher besser, den Errorlevel zu verwenden .

Errorlevel-Nachschlagewerkzeug

Für fortgeschrittene Benutzer und Softwareentwickler hat Microsoft ein Befehlszeilen-Fehlertool für die Suche nach Fehlern, err.exe, veröffentlicht . Sie können nach Fehlerniveaus anhand der Nummer oder des internen Namens suchen und Ihre Suche auf die Header-Datei beschränken, in der der Fehlerebene definiert ist.

 err /winerror.h 0 
 # winerror.h ausgewählt. # für Hex 0x0 / Dezimal 0: ERROR_SUCCESS winerror.h # Der Vorgang wurde erfolgreich abgeschlossen. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h # 4 Treffer für "0" gefunden 
 Err / cmdmsg.h 9009 
 # cmdmsg.h ausgewählt. # für Dezimalzahl 9009 / Hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' wird nicht als interner oder externer Befehl, # betriebsfähiges Programm oder Stapelverarbeitungsdatei erkannt. 1 Treffer für "9009" gefunden 

Sie können das Tool direkt von Microsoft herunterladen.

Programmieren von Begriffen