2010-07-21 13 views
5

Ich habe eine Batch-Datei, die mehrere Dinge tut. Wenn einer von ihnen fehlschlägt, möchte ich das gesamte Programm beenden. Zum Beispiel:Wie wird ein Stapelprogramm bei einem Fehler beendet?

@echo off 
type foo.txt 2>> error.txt >> success.txt 
mkdir bob 

Wenn die Datei foo.txt nicht gefunden wird, dann mag ich die stderr-Nachricht an die error.txt Datei angehängt, sonst wird der Inhalt von foo.txt angehängt wird auf success.txt. Wenn der Befehl type ein stderr zurückgibt, möchte ich die Batchdatei beenden und kein neues Verzeichnis erstellen. Wie können Sie feststellen, ob ein Fehler aufgetreten ist und entscheiden, ob Sie mit dem nächsten Befehl fortfahren müssen oder nicht?

+0

Ich habe den Code WENN NICHT ERRORLEVEL 0 EXIT/B Echo% Errorlevel% vor dem Mkdir Bob Befehl, aber unabhängig von der Wert von ERRORLEVEL (d.h. 0 oder 1) Das Verzeichnis wird noch erstellt. Im Grunde wird ERRORLEVEL mit einem anderen Wert gesetzt, egal ob der Befehl type die Datei findet oder nicht, aber das Programm wird nicht beendet. Gedanken? – Notorious2tall

Antwort

10

Verwendung ERRORLEVEL den Exit-Code des vorherigen Befehls überprüfen:

if ERRORLEVEL 1 exit /b 

EDIT: Dokumentation sagt: „Bedingung erfüllt ist, wenn der Exit-Code des letzten Befehls gleich oder größer als X“ (Sie kann dies mit if /? überprüfen). Abgesehen davon, können Sie auch überprüfen, ob die Datei mit

existiert
if exist foo.txt echo yada yada 

multple Befehle auszuführen, wenn die Bedingung erfüllt ist:

if ERRORLEVEL 1 (echo error in previous command & exit /b) 

oder

if ERRORLEVEL 1 (
    echo error in previous command 
    exit /b 
) 
Verwandte Themen