Análogamente a $?
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)
ante una falla, ¿cómo atrapo estos valores de salida en un archivo .bat
?Cómo obtener el estado de salida de un programa Java en el archivo por lotes de Windows
Respuesta
Use %ERRORLEVEL%. ¿No te encanta cómo los archivos por lotes son claros y concisos? :)
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 :)
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%
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á ...
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 /?
[]]
- 1. Obtener el estado de retorno Y la salida del programa
- 2. texto Abrir archivo y programa de acceso directo en el archivo por lotes de Windows
- 3. Anexión de salida de un archivo por lotes Para registrar el archivo
- 4. Ejecute el archivo por lotes como un servicio de Windows
- 5. ¿Cómo puedo comprobar el tamaño de un archivo en un archivo por lotes de Windows?
- 6. Hacer que el archivo por lotes de windows no se cierre al salir del programa
- 7. Control de psftp en un archivo por lotes de Windows
- 8. ¿Cómo concatenar cadenas en un archivo por lotes de Windows?
- 9. Temporizador en el archivo por lotes de Windows
- 10. ¿Cómo puedo obtener el estado de un programa?
- 11. R Modo por lotes - Suprime el archivo de salida
- 12. Incluir un archivo por lotes en un archivo por lotes
- 13. ¿Cómo establecer el directorio de trabajo de un comando en un archivo por lotes de Windows?
- 14. Cómo obtener el archivo más reciente utilizando un script por lotes en Windows
- 15. Invocar el archivo por lotes de Windows desde Linux
- 16. Cambiar el fondo de pantalla con un archivo por lotes, al cerrar el programa. ¿Posible?
- 17. ¿Cómo puedo ejecutar un programa o un archivo por lotes en el lado del cliente?
- 18. obtener el código de salida para el programa python
- 19. Ejecutando un script por lotes en el cierre de Windows
- 20. Cómo obtener un archivo de proceso por lotes de Windows UNIVERSAL timestamp
- 21. Comando de Windows para obtener el estado del servicio?
- 22. archivo por lotes de Windows operador &&
- 23. Prueba del atributo de archivo en el archivo por lotes
- 24. C# ¿cómo se puede obtener la salida de otro archivo por lotes?
- 25. ¿Cómo atravesar el árbol de carpetas/subárboles en un archivo por lotes de Windows?
- 26. en zsh, ¿cómo hago un condicionamiento sobre el estado de salida de un programa?
- 27. Redirigir argumentos pasados a un archivo por lotes de Windows
- 28. Ejecutando un archivo por lotes en el shell git
- 29. Obtener el último argumento de línea de comando en el archivo de proceso por lotes de Windows
- 30. ¿Cómo recupero la versión de un archivo de un archivo por lotes en Windows Vista?
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í. –
@RichardFawcett: Editado, gracias. –