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:
if
?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?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
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
)
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
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%