Analogue au $?
sous Linux, existe-t-il un moyen d'obtenir le statut de sortie d'un programme dans un fichier batch Windows (.bat
)?
Disons par exemple que le programme a une System.exit(0)
en cas d’exécution réussie et un System.exit(1)
en cas d’échec, comment puis-je intercepter ces valeurs de sortie dans un fichier .bat
?
Utilisez % ERRORLEVEL% . Vous n'aimez pas la clarté et la concision des fichiers de commandes? :)
Quelque chose comme:
Java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%
Il est important d'en faire la prochaine ligne absolue du fichier de commandes pour éviter que le niveau d'erreur ne soit écrasé :)
Notez que si vous utilisez le
IF ERRORLEVEL number
"fonctionnalité" des fichiers de commandes, cela signifie "si le niveau d'erreur est supérieur ou égal à number
" - ce n'est pas basé sur l'égalité. J'ai été mordu par ça avant maintenant :)
Raymond Chen a un bon article de blog nommé ERRORLEVEL n'est pas% ERRORLEVEL% . Cela vaut la peine de vérifier.
Il convient également de noter que la commande REM que la plupart des gens considèrent comme des commentaires ne l’est vraiment pas. La commande REM est une commande nop à laquelle réussit toujours . Après un REM, le niveau d'erreur est toujours 0. Donc
willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail
n'échouera jamais ...
principalement répondre à la question de bulgar , mais complétant les autres réponses:
pour que% ERRORLEVEL% fonctionne, vous devez activer les extensions de commande dans Windows (il s'agit de la valeur par défaut).
Pour une session:
cmd /E:on
ou en permanence dans le registre
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01
pour plus de détails:
cmd /?
[]]
La plupart des opérations de commande externes habituelles renvoientERRORLEVEL0 et cela indique généralement (mais PAS invariablement) qu'aucune erreur n'a été rencontrée:
c:\> dir
...
c:\> echo %ERRORLEVEL%