Все остальные ответы верны: используйте звонок. Например:
call "msbuild.bat"
история
В древних версиях DOS было невозможно рекурсивно выполнять командные файлы. Затем была введена команда call, которая вызывала другую командную оболочку cmd для выполнения командного файла и вернула выполнение обратно в вызывающую командную оболочку, когда закончил.
Очевидно, что в более поздних версиях больше нет необходимости в другой оболочке cmd.
В первые дни многие пакетные файлы зависели от того, что вызов пакетного файла не вернется к вызывающему пакетному файлу. Изменение этого поведения без дополнительного синтаксиса нарушило бы многие системы, такие как системы пакетного меню (используя пакетные файлы для структур меню).
Как и во многих случаях с Microsoft, причиной такого поведения является обратная совместимость.
Советы
Если в ваших пакетных файлах есть пробелы в именах, используйте кавычки вокруг имени:
call "unit tests.bat"
Кстати, если у вас нет всех имен пакетных файлов, вы также можете использовать для этого (это не гарантирует правильный порядок вызовов пакетных файлов; он следует порядку файловой системы):
FOR %x IN (*.bat) DO call "%x"
Вы также можете реагировать на уровни ошибок после вызова. Использование:
exit /B 1 # Or any other integer value in 0..255
вернуть уровень ошибки. 0 обозначает правильное выполнение. В вызывающем пакетном файле вы можете реагировать, используя
if errorlevel neq 0 <batch command>
Используйте, if errorlevel 1
если у вас Windows более старая, чем NT4 / 2000 / XP, чтобы перехватить все уровни ошибок 1 и выше.
Для управления потоком командного файла есть goto :-(
if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...
Как отмечали другие: взгляните на системы сборки для замены командных файлов.