Comment vérifier le code de sortie de la dernière commande du fichier batch?

Réponses:

78

Test pour un code retour supérieur ou égal à 1:

if ERRORLEVEL 1 echo Error

ou

if %ERRORLEVEL% GEQ 1 echo Error

ou testez un code retour égal à 0:

if %ERRORLEVEL% EQU 0 echo OK

Vous pouvez utiliser d'autres commandes telles que celle GOTOoù je montre echo.

Dennis Williamson
la source
J'ai essayé ton code. J'ai eu l'erreur suivante:0 was unexpected this time.
Misha Moroshko
2
@Misha: Vous l'avez peut-être essayé avec les signes de pourcentage comme je l'avais posté à l'origine. Essayez-le sans eux ou essayez les autres versions que j'ai ajoutées.
Dennis Williamson
2
Cas trouvés où %ERRORLEVEL%est 0 même si une erreur s'est produite. Cela s'est produit lors de l'enregistrement %ERRORLEVEL%d'un fichier cmd. Essayer start /waitn'a pas fonctionné. La seule chose qui a fonctionné estif errorlevel 1 (...)
AlikElzin-kilaka
4
Attention, errorlevel n'est pas une variable d'environnement . Voici un bon résumé des pièges et des subtilités .
Nick Westgate
Puis-je suggérer d'utiliser NEQplutôt que de EQUprendre en charge la détection des codes de retour négatifs? Aucune idée si Windows XP fait cela, mais c'est une chose sous Windows moderne…
binki
10

Cela fonctionne vraiment lorsque vous avez: App1.exe appelle -> .bat qui s'exécute -> app2.exe

App2 renvoie errorlevel 1 ... mais vous devez capturer cela dans le fichier .bat et le relancer à app1 ... sinon .bat mange le niveau d'erreur et app1 ne sait jamais.

Méthode:

En .bat:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

Ceci est une vérification après app2 pour errorlevel. Si> 0, le fichier .bat se ferme et définit le niveau d'erreur sur 1 pour l'app1 appelant.

Sam Jones
la source
4
cela pourrait être encore mieux si vous renvoyiez la même erreur à app1. Je ne l' ai pas essayer cela, mais il devrait fonctionner: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic
2
Au moins dans Windows,% ERRORLEVEL% peut être un nombre négatif (par exemple, j'ai un programme qui renvoie -1 en cas d'erreur). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%pourrait être une meilleure option. Mais vous devez vraiment savoir ce que le programme renvoie en cas d'erreur. Certains programmes renvoient certains codes non nuls pour certains types de réussite.
Euro Micelli
Si app2 est la dernière chose que vous exécutez dans le fichier bat, le code d'erreur se propage.
AnrDaemon