Tengo un archivo de proceso por lotes que usa el comando exit
para devolver un código de salida.Honrar códigos de salida de archivos por lotes invocados por msbuild
Este archivo por lotes puede, en algunos casos, invocarse interactivamente desde una línea de comandos, o en otros casos, puede ejecutarse como parte de un proyecto MSBuild, utilizando la tarea Exec
.
- Si uso
exit %errorlevel%
dentro de mi archivo por lotes que esto funciona bien y MSBuild ve el código de error, sin embargo un usuario interactivo que está ejecutando el archivo por lotes desde una ventana de comandos obtendrá una salida grosera de cmd.exe en este caso. - Si uso
exit /b %errorlevel%
el escenario interactivo no obtiene una salida grosera, pero esto también significa que elcmd
iniciado por la tareaExec
tampoco se cierra y, por lo tanto, MSBuild no ve el valor devuelto.
Como solución a ambos problemas, estoy tratando de utilizar exit /b
pero ejecutar el archivo por lotes de mi escritura de la estructura como esta:
<Exec Command="Batch.cmd params & exit %errorlevel%" />
La idea es que explícitamente tomar el 'no terminal 'return from exit /b
y llame manualmente al exit
para propocionar este valor fuera de cmd.exe
donde la tarea de compilación Exec
puede verlo.
Parece la solución perfecta, pero no funciona. Exec
aún no obtiene el valor de error correcto.