980 Stimmen

Wie erhalte ich den Exit-Code der Anwendung über die Windows-Befehlszeile?

Ich führe ein Programm aus und möchte sehen, welchen Rückgabecode es hat (da es bei verschiedenen Fehlern unterschiedliche Codes zurückgibt).

Ich weiß, dass ich in der Bash dies tun kann, indem ich

echo $?

Was muss ich tun, wenn ich cmd.exe unter Windows verwende?

8 Stimmen

1 Stimmen

Ich habe nach "Win8 How to get CMD prompt to show exit status" gegoogelt, so wie wir es in Linux tun können. Dies war die erste Auswahl und ist genau.

2 Stimmen

Sie können schnell sehen, was die App zurückgibt: app.exe & echo %errorlevel%

1177voto

DrFloyd5 Punkte 12856

Eine Pseudo-Umgebungsvariable namens errorlevel speichert den Exit-Code:

echo Exit Code is %errorlevel%

Auch die if Befehl hat eine besondere Syntax:

if errorlevel

Siehe if /? für Einzelheiten.

Beispiel

@echo off
my_nify_exe.exe
if errorlevel 1 (
   echo Failure Reason Given is %errorlevel%
   exit /b %errorlevel%
)

Warnung: Wenn Sie den Namen einer Umgebungsvariablen errorlevel , %errorlevel% diesen Wert und nicht den Exit-Code zurück. Verwenden Sie ( set errorlevel= ), um die Umgebungsvariable zu löschen und den Zugriff auf den wahren Wert von errorlevel über die %errorlevel% Umgebungsvariable.

335voto

Gary Punkte 4066

Prüfung ErrorLevel arbeitet für Konsole Anwendungen, aber wie bereits angedeutet von dmihailescu funktioniert dies nicht, wenn Sie versuchen, eine mit Fenstern Anwendung (z. B. Win32-basiert) von einer Befehlszeile aus. Eine Fensteranwendung wird im Hintergrund ausgeführt, und die Kontrolle kehrt sofort zur Eingabeaufforderung zurück (höchstwahrscheinlich mit einem ErrorLevel von Null, um anzuzeigen, dass der Prozess erstellt erfolgreich). Wenn eine Fensteranwendung schließlich beendet wird, geht ihr Exit-Status verloren.

Statt den an anderer Stelle erwähnten konsolenbasierten C++-Launcher zu verwenden, besteht eine einfachere Alternative darin, eine Fensteranwendung mit der Kommandozeilenoption START /WAIT Befehl. Dadurch wird die Anwendung im Fenster gestartet, auf ihre Beendigung gewartet und dann die Kontrolle an die Eingabeaufforderung zurückgegeben, wobei der Beendigungsstatus des Prozesses in ErrorLevel .

start /wait something.exe
echo %errorlevel%

143voto

Adam Rosenfield Punkte 373807

Verwenden Sie die eingebaute ERRORLEVEL-Variable:

echo %ERRORLEVEL%

Pero Vorsicht, wenn eine Anwendung eine Umgebungsvariable namens ERRORLEVEL definiert hat !

39voto

Curtis Yallop Punkte 5900

Wenn Sie den Fehlercode genau abgleichen wollen (z.B. gleich 0), verwenden Sie dies:

@echo off
my_nify_exe.exe
if %ERRORLEVEL% EQU 0 (
   echo Success
) else (
   echo Failure Reason Given is %errorlevel%
   exit /b %errorlevel%
)

if errorlevel 0 passt zu errorlevel >= 0. Siehe if /? .

18voto

RockDoctor Punkte 171

Es ist erwähnenswert, dass .BAT- und .CMD-Dateien unterschiedlich funktionieren.

Lesen https://ss64.com/nt/errorlevel.html stellt er Folgendes fest:

Es gibt einen wesentlichen Unterschied zwischen der Art und Weise, wie CMD- und BAT-Batchdateien Fehlerstufen setzen:

Ein altes .BAT-Batch-Skript, das die "neuen" internen Befehle ausführt: APPEND, ASSOC, PATH, PROMPT, FTYPE und SET setzt ERRORLEVEL nur, wenn ein Fehler auftritt. Wenn Sie also zwei Befehle im Batch-Skript haben und der erste fehlschlägt, bleibt der ERRORLEVEL gesetzt, auch wenn der zweite Befehl erfolgreich ist.

Dies kann die Fehlersuche in einem problematischen BAT-Skript erschweren. Ein CMD-Batch-Skript ist konsistenter und setzt ERRORLEVEL nach jedem Befehl, den Sie ausführen [Quelle].

Dies bereitete mir unendlich viel Kummer, da ich aufeinanderfolgende Befehle ausführte, aber der ERRORLEVEL blieb auch im Falle eines Fehlers unverändert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X