¿Cómo obtengo el código de salida de la aplicación desde una línea de comando de Windows?
Estoy ejecutando un programa y quiero ver cuál es su código de retorno (ya que devuelve códigos diferentes según diferentes errores).
Sé que en Bash puedo hacer esto ejecutando
eco $?
¿Qué hago cuando uso cmd.exe en Windows?
El "código de salida" se almacena en una variable de shell denominada errorlevel
.
Se errorlevel
establece al final de una aplicación de consola. Las aplicaciones de Windows se comportan de forma un poco diferente; vea la respuesta de @ gary a continuación.
Utilice la if
palabra clave comando errorlevel
para comparar:
if errorlevel <n> (<statements>)
Que ejecutará declaraciones cuando el nivel de error sea mayor o igual a n . Ejecute if /?
para obtener más detalles.
Una variable de shell nombrada errorlevel
contiene el valor como una cadena y se puede desreferenciar envolviéndola con %.
Guión de ejemplo:
my_nifty_exe.exe
rem Give resolution instructions for known exit codes.
rem Ignore exit code 1.
rem Otherwise give a generic error message.
if %errorlevel%==7 (
echo "Replace magnetic tape."
) else if %errorlevel%==3 (
echo "Extinguish the printer."
) else if errorlevel 2 (
echo Unknown Error: %errorlevel% refer to Run Book documentation.
) else (
echo "Success!"
)
Advertencia: una variable de entorno denominada nivel de error, si existe, anulará la variable de shell denominada nivel de error. if errorlevel
Las pruebas no se ven afectadas.
Las pruebas ErrorLevel
funcionan para aplicaciones de consola , pero como lo insinuó dmihailescu , esto no funcionará si intenta ejecutar una aplicación en ventana (por ejemplo, basada en Win32) desde un símbolo del sistema. Se ejecutará una aplicación en ventana en segundo plano y el control volverá inmediatamente al símbolo del sistema (muy probablemente con un valor ErrorLevel
de cero para indicar que el proceso se creó correctamente). Cuando finalmente se cierra una aplicación con ventana, se pierde su estado de salida.
Sin embargo, en lugar de utilizar el iniciador de C++ basado en consola mencionado en otra parte, una alternativa más sencilla es iniciar una aplicación en ventana utilizando el START /WAIT
comando del símbolo del sistema. Esto iniciará la aplicación en ventana, esperará a que salga y luego devolverá el control al símbolo del sistema con el estado de salida del proceso establecido en ErrorLevel
.
start /wait something.exe
echo %errorlevel%
Utilice la variable ERRORLEVEL incorporada:
echo %ERRORLEVEL%
¡Pero tenga cuidado si una aplicación ha definido una variable de entorno llamada ERRORLEVEL !