Todas las demás respuestas son correctas: use call. por ejemplo:
call "msbuild.bat"
Historia
En antiguas versiones de DOS que no era posible ejecutar archivos por lotes de forma recursiva. A continuación, se introdujo el comando de llamada que llamó a otro shell cmd para ejecutar el archivo por lotes y devolvió la ejecución al shell cmd que realiza la llamada cuando finalizó.
Obviamente en versiones posteriores ya no era necesario ningún otro shell de cmd.
En los primeros días, muchos archivos de proceso por lotes dependían del hecho de que llamar a un archivo por lotes no volvía al archivo de proceso por lotes llamado. Cambiar ese comportamiento sin sintaxis adicional habría roto muchos sistemas, como los sistemas de menú por lotes (utilizando archivos de proceso por lotes para las estructuras de menú).
Como en muchos casos con Microsoft, la compatibilidad con versiones anteriores es la razón de este comportamiento.
Consejos
Si sus archivos por lotes tienen espacios en sus nombres, usar comillas alrededor del nombre:
call "unit tests.bat"
Por cierto: si no tiene todos los nombres de los archivos por lotes , también podría usar para hacer esto: (no garantiza el orden correcto de las llamadas a archivos por lotes, sigue el orden del sistema de archivos)
FOR %x IN (*.bat) DO call "%x"
También puede reaccionar en niveles de error después de una llamada. Utilice
exit /B 1 # or any other integer value in 0..255
para devolver un nivel de error. 0 denota ejecución correcta. En el archivo por lotes se puede llamar a reaccionar utilizando
if errorlevel neq 0 <batch command>
uso si errorlevel 1 si tiene un Windows una edad avanzada a continuación, NT4/2000/XP para coger todos errorlevels 1 y mayores.
Para controlar el flujo de un archivo por lotes, existe :-(Goto
if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...
Como otros señalaron: echar un vistazo a los sistemas de compilación para reemplazar archivos por lotes
@sean - No tiene que instalar el paquete completo de Cygwin para que funcione la línea de comando. Simplemente saca todos los archivos dll de cygwin del paquete, colócalos en un directorio de patp, coloca todas tus herramientas en otro directorio de patted y listo. –
suponiendo que cada uno de estos archivos son solo por lotes, por qué no simplemente ponerlos en un archivo grande y utilizar la función de tiempo de espera para permitir que cada vez que se inicie. –