2010-07-21 9 views
5

Mam plik wsadowy, który wykonuje kilka rzeczy. Jeśli jedno z nich zawiedzie, chcę zamknąć cały program. Na przykład:Jak wyjść z programu wsadowego po błędzie?

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

Jeśli foo.txt plik nie został znaleziony potem chcę wiadomość stderr dołączane do pliku error.txt, inny zawartość foo.txt jest dołączany do success.txt. Zasadniczo, jeśli polecenie type zwraca stderr, chcę, aby plik wsadowy zakończył pracę i nie tworzy nowego katalogu. Jak rozpoznać, czy wystąpił błąd i zdecydować, czy musisz przejść do następnego polecenia, czy nie?

+0

dodałem kod IF NOT ERRORLEVEL 0 EXIT/B echo% errorlevel% przed komendą mkdir bob, ale niezależnie od wartość ERRORLEVEL (tj. 0 lub 1) katalog jest nadal tworzony. Zasadniczo ERRORLEVEL jest ustawiany z inną wartością, niezależnie od tego, czy polecenie typu znajdzie plik, czy nie, ale program nie jest zamykany. Myśli? – Notorious2tall

Odpowiedz

10

użycie ERRORLEVEL sprawdzić kod zakończenia poprzedniego polecenia:

if ERRORLEVEL 1 exit /b 

EDIT: dokumentacja mówi „warunek jest spełniony, jeśli kod zakończenia ostatniego polecenia jest równy lub większy niż X” (ty można to sprawdzić pod numerem if /?). Poza tym, można również sprawdzić, czy plik istnieje z

if exist foo.txt echo yada yada 

wykonać multple polecenia jeśli warunek jest spełniony:

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

lub

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