[BATCH MS-DOS] Code retour ERRORLEVEL différent suivant mode lancement

Code retour ERRORLEVEL différent suivant mode lancement [BATCH MS-DOS] - Shell/Batch - Programmation

Marsh Posté le 29-11-2016 à 16:56:29    

Bonjour à tous,
 
Je m'arrache les cheveux depuis quelques heures sur un problème de valeur du code %ERRORLEVEL% au niveau d'un script .bat.
Pour faire simple, j'ai un fichier .bat qui lance une application en .exe.
Je récupère ensuite le code retour du lancement de cette application pour donner ce même code retour à mon .bat.
 
J'ai donc mon .bat (je vous montre la version simple ici):

Code :
  1. rem Lancement de la duplication
  2. set /A errcode=0
  3. MonApplication.exe param1 param2 param3
  4. rem On teste le code retour
  5. IF %ERRORLEVEL% EQU 0 (SET errcode=%ERRORLEVEL% && echo "TERMINE OK." ) ELSE (SET errcode=%ERRORLEVEL% && echo "KO." )
  6. echo %errcode%
  7. rem exit /B %errcode%


 
Quand je lance MonApplication.exe avec des paramètres farfelues directement dans une invite de commande via le menu démarrer > exécuter > cmd, le echo %errcode% renvoit bien une erreur avec le code retour 4.

Code :
  1. c:\Toolkit\>MonApplication.exe param1 param2 param3
  2. c:\Toolkit\>echo %ERRORLEVEL%
  3. 4


 
Par contre, quand je passe directement par le .bat, le code retour est toujours 0 (zéro) avec le echo "TERMINE OK", et je ne comprends pas pourquoi.

Code :
  1. c:\Toolkit>MonBatch.bat param1 param2 param3
  2. c:\Toolkit>echo off
  3. "TERMINE OK."
  4. 0


 
Est-ce que vous auriez une idée, svp ?
 
Merci.


Message édité par Le Taz le 29-11-2016 à 17:05:04

---------------
Profil D3
Reply

Marsh Posté le 29-11-2016 à 16:56:29   

Reply

Marsh Posté le 30-11-2016 à 09:48:56    

Je viens de trouver une piste.
En lançant mon .bat dans une invite de commande MS-DOS après y avoir fait un set ERRORLEVEL=1, cela fonctionne.
Cela veut donc dire que dans mon .bat, quand je teste la valeur de ERRORLEVEL via mon IF, il se réfère à cette variable dans l'environnement de l'invite de commande (que j'ai positionné à 1) et non dans l'environnement de mon .bat où le code retour de mon .exe est bien différent.
 
Il doit donc y avoir un moyen d'isoler tout ça. Une idée, svp ?


---------------
Profil D3
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed