2009-05-20 8 views

Respuesta

26

Use %ERRORLEVEL%. ¿No te encanta cómo los archivos por lotes son claros y concisos? :)

26

Algo así como:

java Foo 
set exitcode=%ERRORLEVEL% 
echo %exitcode% 

Es importante hacer esta absoluta del siguiente línea del archivo por lotes, para evitar el nivel de error se sobrescribe :)

Tenga en cuenta que si se utiliza el

IF ERRORLEVEL number 

"característica" de archivos por lotes, que significa "si el nivel de error es mayor o igual a number" - no se basa en la igualdad. Me ha picado que antes de ahora :)

+0

tuve un pequeño problema con esta respuesta ... AFAIK, no puede usar espacio en el comando set, por lo que debe establecerse exitcode =% ERRORLEVEL%. De todos modos, hacer que el cambio funcionara para mí. –

+0

@RichardFawcett: Editado, gracias. –

0

La mayor parte de las operaciones habituales de comandos externos volver ERRORLEVEL 0 y esto por lo general (pero no siempre) indica que no se encontró ningún error:

c:\> dir 
... 
c:\> echo %ERRORLEVEL% 
19

Raymond Chen tiene una buena publicación de blog llamada ERRORLEVEL is not %ERRORLEVEL%. Vale la pena echarle un vistazo.

También vale la pena señalar que el comando REM, que la mayoría de la gente piensa como comentarios, realmente no lo es. El comando REM es un comando nop que siempre sucede. Después de un REM, el nivel de error es siempre 0. Por lo tanto

willalwaysfail.bat 
REM unless you insert a comment after it 
if errorlevel 1 goto fail 

nunca fallará ...

1

sobre todo respondiendo bulgar pregunta 's, pero que complementa las otras respuestas:

para% ERRORLEVEL% para que funcione, debe tener las extensiones de comando activadas en Windows (es el valor predeterminado).
Para una sesión:

cmd /E:on 

o permanentemente en el registro

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01 

para más detalles:

cmd /? 

[]]

Cuestiones relacionadas