De manière analogue à $?
sous Linux, existe-t-il un moyen d'obtenir le statut de sortie d'un programme dans un fichier de commandes Windows (.bat
)?
Dites par exemple le programme a un System.exit(0)
lors de l'exécution réussie, et un System.exit(1)
en cas d'échec, comment puis-je piéger ces valeurs de sortie dans un fichier .bat
?Comment obtenir le statut de sortie d'un programme Java dans le fichier de commandes Windows
Répondre
Utilisez %ERRORLEVEL%. N'aimes-tu pas comment les fichiers batch sont clairs et concis? :)
Quelque chose comme:
java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%
Il est important de faire de cette ligne suivante absolue du fichier batch, afin d'éviter le niveau d'erreur étant écrasé :)
Notez que si vous utilisez le
IF ERRORLEVEL number
« caractéristique » des fichiers par lots, cela signifie que « si le niveau d'erreur est supérieure ou égale à number
» - il ne se fonde pas sur l'égalité. J'ai été mordu par ce avant maintenant :)
La plupart des opérations de commande externes habituels retour ERRORLEVEL 0 et ce généralement (mais pas toujours) indique qu'aucune erreur n'a été rencontrée:
c:\> dir
...
c:\> echo %ERRORLEVEL%
Raymond Chen a un bon blog intitulé ERRORLEVEL is not %ERRORLEVEL%. Ça vaut le coup 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 qui réussit toujours. Après un REM, le niveau d'erreur est toujours 0. Alors
willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail
ne périra jamais ...
répondre à la plupart boulgour question de, mais complétant les autres réponses:
% pourERRORLEVEL% pour fonctionner, vous devez avoir les extensions de commande activées dans Windows (c'est la valeur par défaut).
Pour une séance:
cmd /E:on
ou de façon permanente dans le registre
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01
pour plus de détails:
cmd /?
[]]
J'ai eu un léger problème avec cette réponse ... AFAIK, vous ne pouvez pas utiliser d'espace dans la commande set, il doit donc être défini sur exitcode =% ERRORLEVEL%. Quoi qu'il en soit, faire ce changement a fonctionné pour moi. –
@RichardFawcett: Édité, merci. –