2010-07-21 4 views
5

J'ai un fichier batch qui fait plusieurs choses. Si l'un d'eux échoue, je veux quitter l'ensemble du programme. Par exemple:Comment quitter un programme batch en cas d'erreur?

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

Si le fichier foo.txt ne se trouve pas alors je veux que le message stderr ajouté au fichier error.txt, sinon le contenu de foo.txt est joint en annexe à success.txt. Fondamentalement, si la commande type renvoie une erreur stderr, je veux que le fichier de commandes sorte et ne crée pas un nouveau répertoire. Comment pouvez-vous dire si une erreur s'est produite et décider si vous devez passer à la commande suivante ou non?

+0

J'ai ajouté le code SI NON ERRORLEVEL 0 EXIT/B echo% errorlevel% avant la commande mkdir bob, mais quel que soit le valeur de ERRORLEVEL (c.-à-d. 0 ou 1) le répertoire est toujours créé. Donc, fondamentalement, ERRORLEVEL est défini avec une valeur différente si la commande type trouve le fichier ou non, mais le programme ne se ferme pas. Pensées? – Notorious2tall

Répondre

10

utilisation ERRORLEVEL pour vérifier le code de sortie de la commande précédente:

if ERRORLEVEL 1 exit /b 

EDIT: la documentation indique « la condition est vraie si le code de sortie de la dernière commande est égale ou supérieure à X » (vous peut vérifier cela avec if /?). En dehors de cela, vous pouvez également vérifier si le fichier existe avec

if exist foo.txt echo yada yada 

pour exécuter multple commandes si la condition est vraie:

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

ou

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