web-dev-qa-db-fra.com

Comment obtenir le statut de sortie d'un programme Java dans un fichier batch Windows

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?

25
pugmarx

Utilisez % ERRORLEVEL% . Vous n'aimez pas la clarté et la concision des fichiers de commandes? :)

27
Matthew Flaschen

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 :)

27
Jon Skeet

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 ...

19
JesperE

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 /?

[]]

1
Carlos Heuberger

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%
0
dfa