it-swarm.com.de

Prüfen Sie, ob der Prozess mit der Batchdatei zurückkehrt

Ich möchte einen Prozess mit einer Batchdatei starten. Wenn sie nicht Null zurückgibt, tun Sie etwas anderes. Ich brauche dafür die richtige Syntax.

Etwas wie das:

::x.bat

@set RetCode=My.exe
@if %retcode% is nonzero
   handleError.exe

Als Bonus können Sie folgende Fragen beantworten:

  • Wie schreibe ich eine zusammengesetzte Anweisung mit if?
  • Wenn die Anwendung My.exe nicht gestartet werden kann, weil einige DLL fehlen, wird dies funktionieren, wenn es funktioniert? Wenn nicht, wie kann ich feststellen, dass My.exe nicht gestartet wurde?
33
Armen Tsirunyan

ERRORLEVEL enthält den Rückgabewert des letzten Befehls. Leider können Sie nur >= überprüfen. 

Beachten Sie speziell diese Zeile in der MSDN-Dokumentation für die If-Anweisung :

errorlevel Nummer

Gibt eine wahr .__ an. Bedingung nur, wenn das vorherige Programm run by Cmd.exe lieferte einen Exit-Code gleich oder größer als Number.

Um auf 0 zu prüfen, müssen Sie über den Tellerrand hinaus denken:

IF ERRORLEVEL 1 GOTO errorHandling
REM no error here, errolevel == 0
:errorHandling

Oder wenn Sie die Fehlerbehandlung zuerst codieren möchten:

IF NOT ERRORLEVEL 1 GOTO no_error
REM errorhandling, errorlevel >= 1
:no_error

Weitere Informationen zur BAT-Programmierung: http://www.ericphelps.com/batch/ Oder genauer für Windows cmd: MSDN mit Batchdateien

53
Eduard Wirch

Wie schreibt man eine zusammengesetzte Anweisung mit ob?

Sie können eine zusammengesetzte Anweisung mit Klammern in einen if-Block schreiben. Die erste Klammer muss in der Zeile mit dem If stehen und die zweite in einer Zeile.

if %ERRORLEVEL% == 0 (
    echo ErrorLevel is zero
    echo A second statement
) else if %ERRORLEVEL% == 1 (
    echo ErrorLevel is one
    echo A second statement
) else (
   echo ErrorLevel is > 1
   echo A second statement
)
14
shf301

Bei dem Projekt, an dem ich arbeite, machen wir so etwas. Wir verwenden das Schlüsselwort errorlevel, so dass es so aussieht:

call myExe.exe
if errorlevel 1 (
  goto build_fail
)

Das scheint für uns zu funktionieren. Beachten Sie, dass Sie mehrere Befehle in die Parens einfügen können, wie ein Echo oder was auch immer. Beachten Sie auch, dass build_fail definiert ist als:

:build_fail
echo ********** BUILD FAILURE **********
exit /b 1
3
Merky

Dies ist nicht genau die Antwort auf die Frage, aber ich komme jedes Mal hierher, wenn ich herausfinden möchte wie ich meine Batch-Datei mit einem Fehlercode beenden kann, wenn ein Prozess einen Code ungleich Null zurückgibt.

Hier ist die Antwort darauf:

if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%
1
Techniquab