web-dev-qa-db-fra.com

Vérifier si le processus retourne avec un fichier batch

Je veux démarrer un processus avec un fichier de commandes et s'il renvoie des valeurs différentes de zéro, faites autre chose. J'ai besoin de la syntaxe correcte pour cela.

Quelque chose comme ça:

::x.bat

@set RetCode=My.exe
@if %retcode% is nonzero
   handleError.exe

En prime, vous pouvez envisager de répondre aux questions suivantes:

  • Comment écrire une instruction composée avec if?
  • Si l'application My.exe ne parvient pas à démarrer car il manque de la balise DLL, elle fonctionnera si? Si non, comment puis-je détecter que My.exe n'a pas pu démarrer?
33
Armen Tsirunyan

ERRORLEVEL contiendra le code retour de la dernière commande. Malheureusement, vous ne pouvez vérifier que >= pour cela. 

Notez spécifiquement cette ligne dans la documentation MSDN pour l'instruction If :

errorlevel Number

Spécifie un vrai condition que si le programme précédent exécuté par Cmd.exe a renvoyé un code de sortie égal ou supérieur à Nombre.

Donc, pour vérifier 0, vous devez sortir des sentiers battus:

IF ERRORLEVEL 1 GOTO errorHandling
REM no error here, errolevel == 0
:errorHandling

Ou si vous voulez d'abord coder le traitement des erreurs:

IF NOT ERRORLEVEL 1 GOTO no_error
REM errorhandling, errorlevel >= 1
:no_error

Informations complémentaires sur la programmation BAT: http://www.ericphelps.com/batch/ Ou plus spécifique pour Windows cmd: MSDN à l'aide de fichiers de traitement par lots

53
Eduard Wirch

Comment écrire une déclaration composée avec si?

Vous pouvez écrire une instruction composée dans un bloc if en utilisant des parenthèses. La première parenthèse doit venir sur la ligne avec le if et la seconde sur une ligne à part.

if %ERRORLEVEL% == 0 (
    echo ErrorLevel is zero
    echo A second statement
) else if %ERRORLEVEL% == 1 (
    echo ErrorLevel is one
    echo A second statement
) else (
   echo ErrorLevel is > 1
   echo A second statement
)
14
shf301

Le projet sur lequel je travaille, nous faisons quelque chose comme ça. Nous utilisons le mot clé errorlevel pour qu'il ressemble à ceci:

call myExe.exe
if errorlevel 1 (
  goto build_fail
)

Cela semble fonctionner pour nous. Notez que vous pouvez mettre plusieurs commandes dans les parens comme un écho ou autre. Notez également que build_fail est défini comme:

:build_fail
echo ********** BUILD FAILURE **********
exit /b 1
3
Merky

Ce n'est pas exactement la réponse à la question, mais je me retrouve ici chaque fois que je veux savoir comment obtenir la fermeture de mon fichier de commandes avec un code d'erreur lorsqu'un processus renvoie un code non nul

Alors voici la réponse à cela:

if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%
0
Techniquab