2011-07-25 6 views
10

Estoy tratando de ejecutar condicionalmente un exe de un archivo por lotes condicionalmente en otro ejecutando Exe con éxito.nivel de error de prueba de archivo por lotes

He intentado un par de combinaciones diferentes de IF y ERRORLEVEL pero ninguno parece funcionar

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

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

me da el error

1 (fue inesperado en este momento.

¿Dónde me estoy equivocando aquí?

+0

Hmm, tal vez '1 (' que está mal ¿Usted ha intentado '1 (' con un espacio Y, por cierto usar 'si errorlevel 1 (...' 'o si? % errorlevel% == 1 (... ' – jeb

+0

@jeb: Esa parece ser la causa real del error, es decir, la sintaxis mezclada en el script del OP. –

Respuesta

32

IF ERRORLEVEL ... es una sintaxis especial admitida desde los días de DOS, el soporte de la variable %ERRORLEVEL% se agregó en WinNT.

La sintaxis original se utiliza como esto:

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

utilizar la variable, utilice el normal si sintaxis: if %errorlevel%==0 echo success...

Tenga en cuenta que %errorlevel% deja de funcionar si alguien hace set errorlevel=foo y puede que no se actualizan para comandos internos de cmd.exe.

Una solución alternativa es utilizar &&:

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

Hay (al menos) dos casos conocidos en nivel de error se pierde y debe utilizar || lugar:

+1

Solo he usado' && 'o' || ', nunca los dos en una línea. No sabían que, en conjunto, funcionan esencialmente como' IF ... ELSE'. Eso es algo bueno de aprender, ¡gracias! –

+4

if errorlevel 0 significa "si errorlevel es mayor que o igual a cero ", es decir, cualquier valor. La manera correcta de pedir el éxito es: si no errorlevel 1 echo success ... – Aacini

+0

@Aacini: bueno sí, pero estoy comprobando 1 antes que 0, esa es una manera válida para hacerlo. – Anders

5

Niveles de error negativos pueden crear un problema. Intentar algo como esto:

IF '%ERRORLEVEL%'=='0' GOTO OK 
Cuestiones relacionadas