Усі інші відповіді правильні: використовуйте дзвінок. Наприклад:
call "msbuild.bat"
Історія
У стародавніх версіях DOS рекурсивно не можна було виконувати пакетні файли. Тоді була введена команда виклику, яка викликала іншу оболонку cmd, щоб виконати пакетний файл і повернула виконання назад у викликову оболонку 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
...
Як зазначали інші: подивіться на системи побудови для заміни пакетних файлів.