una programas llamar ejecutar desde consola con comando bat archivo aplicacion abrir java windows batch-file exit-code

programas - llamar cmd desde java



Cómo obtener el estado de salida de un programa Java en el archivo por lotes de Windows (5)

Análoga a los $? en Linux, ¿hay alguna forma de obtener el estado de salida de un programa en un archivo por lotes de Windows ( .bat )?
Digamos por ejemplo que el programa tiene un System.exit(0) luego de una ejecución exitosa, y un System.exit(1) luego de una falla, ¿cómo System.exit(1) estos valores de salida en un archivo .bat ?


Algo como:

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

Es importante hacer de esto la próxima línea absoluta del archivo por lotes, para evitar que se sobrescriba el nivel de error :)

Tenga en cuenta que si usa el

IF ERRORLEVEL number

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


La mayoría de las operaciones de comando externas habituales devuelven ERRORLEVEL 0 y esto generalmente (pero NO invariablemente) indica que no se encontró ningún error:

c:/> dir ... c:/> echo %ERRORLEVEL%


Raymond Chen tiene una buena publicación de blog llamada ERRORLEVEL no es% 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 tiene éxito . Después de un REM, el nivel de error siempre es 0. Entonces

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

nunca fallará ...


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


principalmente respondiendo la pregunta de Bulgar , pero complementando las otras respuestas:

para que% ERRORLEVEL% 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 /?

[]]