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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.