Was ist Errorlevel?

Was ist Errorlevel?

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

Errorlevel ist 0, wenn der Vorgang erfolgreich war.

Errorlevel ist 1 oder höher, wenn der Prozess auf einen Fehler gestoßen ist.

Fehlerlevel testen

Das Testen von errorlevel ist nützlich, wenn Sie mehrere Befehle ausführen, entweder in der Befehlszeile oder in einer Stapeldatei.

Mithilfe eines bedingten Ausdrucks können Sie Befehle angeben, die nur ausgeführt werden, 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 auf bestimmte Arten von Fehlern testen.

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

Bedingtes „wenn [not] Fehlerebene”

Der Bedingungsausdruck „if errorlevel n“ ist wahr, wenn der Fehlerlevel größer oder gleich n ist.

In ähnlicher Weise ist “wenn nicht Fehlerebene n” wahr, wenn die Fehlerebene kleiner als n ist.

Schauen wir uns Beispiele an, wie diese verwendet werden können, indem Sie einige Befehle in der Windows-Befehlszeile ausführen.

Ö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 mydirectory

Wenn wir mkdir ausführen (vorausgesetzt, es gibt nicht bereits ein Verzeichnis namens „mydirectory“ im aktuellen Verzeichnis), wird das Verzeichnis mydirectory erstellt. Der Befehl war erfolgreich, daher setzt mkdir beim Beenden den Fehlerlevel auf 0.

Lassen Sie uns auf Errorlevel 0 testen.

Testerfolg: “if not errorlevel”

Wir können mit der bedingten Anweisung auf Fehlerlevel 0 (Erfolg) testen, wenn nicht Fehlerlevel 1. Wenn das wahr ist (Fehlerlevel ist kleiner als 1), wird der Befehl ausgeführt, der auf die Bedingung folgt. In den folgenden Beispielen verwenden wir den echo-Befehl, um eine Nachricht auf dem Bildschirm auszugeben.

if not errorlevel 1 echo The last command was successful.
The last command was successful.

Wie bereits erwähnt, war der oben ausgeführte mkdir-Befehl erfolgreich.

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

mkdir mydirectory
A subdirectory or file example already exists.

Wenn mkdir fehlschlägt, liefert es seine eigene Fehlermeldung „Ein Unterverzeichnis oder eine Beispieldatei existiert bereits“ und setzt den Fehlerlevel auf 1. Wenn wir unsere bedingte Anweisung erneut ausführen:

if not errorlevel 1 echo The last command was successful.

Nichts passiert. Unser echo-Befehl wird nicht ausgeführt, weil wir auf Erfolg getestet haben – errorlevel kleiner als 1 – und diese Bedingung falsch ist.

Testfehler: “if errorlevel”

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

if errorlevel 1 echo The last command failed.
The last command failed.

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

Verzweigungsausführung mit if..else

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

Wir können sowohl auf Erfolg als auch auf Misserfolg testen, indem wir eine if/else-Anweisung der Form verwenden:

if [not] errorlevel n (command1) else (command2)
Notiz

Die Klammern sind notwendig, um die Befehle vom Wort else zu trennen.

Zum Beispiel:

mkdir newtest
if not errorlevel 1 (echo Success) else (echo Failure)
Success
mkdir newtest
A subdirectory or file newtest already exists.
if not errorlevel 1 (echo Success) else (echo Failure)
Failure

Umgebungsvariable %ERRORLEVEL%

Häufig wird der Fehlerlevel auch in der Umgebungsvariable %ERRORLEVEL% gespeichert. Sein Wert ist ein bequemer Weg, um auf Ihren aktuellen Fehlerlevel zuzugreifen.

Im folgenden Beispiel führen wir den dir-Befehl zweimal aus, einmal erfolgreich und einmal erfolglos. Nach jedem geben wir den Wert von %ERRORLEVEL% wieder.

mkdir example
dir example
Directory of C:UsersHopeexample

06/10/2018  09:43 PM    <DIR>          .
06/10/2018  09:43 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  50,671,132,672 bytes free
echo %ERRORLEVEL%
0
dir misspelled
Directory of C:UsersHope

File Not Found
echo %ERRORLEVEL%
1

Verwendung von %ERRORLEVEL% in Bedingungen

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

if %ERRORLEVEL% NEQ 0 echo Errorlevel is not equal to zero, the last command failed.
Tipp

NEQ ist der relationale Operator, der „ungleich“ bedeutet.

Hinweis: %ERRORLEVEL% ist nicht immer korrekt

%ERRORLEVEL% ist nicht dasselbe wie if [not] errorlevel, und die beiden Werte sind nicht immer gleich. Insbesondere wird %ERRORLEVEL% nicht immer aktualisiert, wenn sich die Fehlerstufe ändert. Weitere Informationen finden Sie in diesem MSDN-Blogbeitrag von Raymond Chen.

Wenn Sie errorlevel in einer Produktionsumgebung testen, ist es aus diesem Grund besser, if zu verwenden [not] Fehlerstufe.

Errorlevel-Suchtool

Für fortgeschrittene Benutzer und Softwareentwickler hat Microsoft ein Befehlszeilen-Errorlevel-Lookup-Tool, err.exe, veröffentlicht. Es ermöglicht Ihnen, anhand der Nummer oder des internen Namens nach Fehlerebenen zu suchen und Ihre Suche nach der Header-Datei einzuschränken, in der die Fehlerebene definiert ist.

err /winerror.h 0
# winerror.h selected.
# for hex 0x0 / decimal 0 :
  ERROR_SUCCESS                                                 winerror.h
# The operation completed successfully.
  NO_ERROR                                                      winerror.h
  SEC_E_OK                                                      winerror.h
  S_OK                                                          winerror.h
# 4 matches found for "0"
err /cmdmsg.h 9009
# cmdmsg.h selected.
# for decimal 9009 / hex 0x2331 :
  MSG_DIR_BAD_COMMAND_OR_FILE                                   cmdmsg.h
# '%1' is not recognized as an internal or external command,
# operable program or batch file.
# 1 matches found for "9009"

Programmierbegriffe

Neueste Artikel
Vielleicht möchten Sie lesen

LEAVE A REPLY

Please enter your comment!
Please enter your name here