Все остальные ответы верны: используйте звонок.Например:
call "msbuild.bat"
History
В древних версиях DOS было невозможно рекурсивно выполнять командные файлы.Затем была введена команда call, которая вызвала другую оболочку 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 и выше.
Для управленияпоток командного файла, там идет: - (
if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...
Как уже указывали другие: взгляните на системы сборки для замены командных файлов.