web-dev-qa-db-fra.com

niveau d'erreur de test de fichier de commandes

J'essaie d'exécuter conditionnellement un exe à partir d'un fichier de commandes conditionnellement sur un autre exe s'exécutant avec succès.

J'ai essayé quelques combinaisons différentes de IF et ERRORLEVEL mais aucune ne semble fonctionner

"..\..\..\TeamBuildTypes\Current Branch\DatabaseUpdate.exe" -s localhost\sql2008r2 

IF %ERRORLEVEL% 1(
"..\..\..\TeamBuildTypes\Current Branch\DatabaseUpdate.exe" -s localhost\sql2008
)
Pause

Me donne l'erreur

1 (était inattendu à cette époque.

Où vais-je mal ici?

18
Daniel Powell

IF ERRORLEVEL ... est une syntaxe spéciale prise en charge depuis les jours DOS, le %ERRORLEVEL% la prise en charge des variables a été ajoutée dans WinNT.

La syntaxe d'origine est utilisée comme ceci:

call someapp.exe
if errorlevel 1 goto handleerror1orhigher
echo succuess... 

Pour utiliser la variable, utilisez la syntaxe IF normale: if %errorlevel%==0 echo success...

Notez que %errorlevel% cesse de fonctionner si quelqu'un le fait set errorlevel=foo et il pourrait ne pas être mis à jour pour les commandes internes cmd.exe.

Une autre solution consiste à utiliser &&:

call someapp.exe && (echo success) || (echo error!)

Il existe (au moins) deux cas connus où le niveau d'erreur est cassé et vous devez utiliser || au lieu:

42
Anders

Les niveaux d'erreur négatifs peuvent créer un problème. Essayez quelque chose comme ceci:

IF '%ERRORLEVEL%'=='0' GOTO OK
5
cdndcnj