Как запустить несколько файлов .BAT внутри одного файла .BAT

Я пытаюсь заставить мой commit-build.bat выполнять другие .BAT файлы как часть нашего процесса сборки.

Содержимое commit-build.bat:

"msbuild.bat"
"unit-tests.bat"
"deploy.bat"

Это кажется достаточно простым, но commit-build.bat выполняет только первый элемент в списке (msbuild.bat).

Я запускал каждый из этих файлов отдельно без проблем.

Комментарии к вопросу (2)
Решение

Используйте:

call msbuild.bat
call unit-tests.bat
call deploy.bat

Если не использовать CALL, текущий пакетный файл останавливается, а вызываемый пакетный файл начинает выполняться. Это своеобразное поведение, восходящее к ранним дням MS-DOS.

Комментарии (8)

Все остальные ответы являются правильными: использовать звонок. Например:

 call "msbuild.bat"

История

В Древней DOS версии не было возможности рекурсивно выполнить пакетные файлы. Затем команда вызова, который называют еще одну оболочку cmd, чтобы выполнить пакетный файл и вернул выполнения вызывающему оболочки cmd, когда закончите.

Очевидно, в более поздних версиях никакой другой оболочки cmd больше не было необходимости.

В первые дни много пакетных файлов зависит от того, что вызов пакетного файла не вернется в вызывающий пакетный файл. Изменить это поведение без дополнительного синтаксиса, разбило бы многих систем, таких как системы пакетной меню (используя пакетные файлы для меню структуры).

Как и во многих случаях с Microsoft, поэтому обратной совместимости является причиной такого поведения.

Советы

Если ваши пакетные файлы, содержащие пробелы в именах, используйте кавычки вокруг имени:

call "unit tests.bat"

Кстати: если вы не имеете имена всех пакетных файлов, можно также использовать для того чтобы сделать это (это не гарантирует правильный порядок пакетный файл вызовов; он следит за порядком файловой системы):

FOR %x IN (*.bat) DO call "%x"

Вы можете также реагировать на errorlevels после звонка. Использование:

exit /B 1   # Or any other integer value in 0..255

чтобы восстановить значение errorlevel. 0 обозначает правильное выполнение. В вызове пакетного файла вы можете реагировать с помощью

if errorlevel neq 0 

Если значение errorlevel 1` Если у вас есть старые окна, чем это NT4/2000/XP, чтобы поймать все errorlevels 1 и больше.

Чтобы контролировать поток пакетный файл, есть Гото :-(

if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...

Как отметили другие: посмотреть на системы сборки для замены пакетных файлов.

Комментарии (3)

Если мы хотим открыть несколько командных строк, то мы могли бы использовать

start cmd /k

: является обязательной, которая будет исполнять.

Запускает много командных строк может быть сделано, как показано ниже.

start cmd /k Call rc_hub.bat 4444

start cmd /k Call rc_grid1.bat 5555

start cmd /k Call rc_grid1.bat 6666

start cmd /k Call rc_grid1.bat 5570.
Комментарии (9)

Попробуйте:

call msbuild.bat
call unit-tests.bat
call deploy.bat
Комментарии (0)

Вы звоните несколько партий в попытке скомпилировать программу. Я беру за аксиому, что если возникает ошибка:

  1. программа в пакете выйдет с errorlevel;
  2. Вы хотите об этом знать.
for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1

'||' тесты для ошибки выше, чем 0. Таким образом, все партии называются в порядке, но остановится на любую ошибку, оставив на экране для вас, чтобы увидеть сообщения об ошибках.

Комментарии (0)
call msbuild.bat
call unit-tests.bat
call deploy.bat
Комментарии (0)

Если у нас есть два пакетных скриптах, ААА.летучая мышь и ВВВ.BAT и вызов, как показано ниже

call aaa.bat
call bbb.bat

При выполнении скрипта, он будет звонить в ААА.летучая мышь во-первых, ждать нить ААА.летучая мышь завершить, и звонить ВВВ.летучая мышь.

Но если вы Don'т хотите ждать ААА.bat, чтобы прекратить называть БББ.летучая мышь, попробуйте использовать пуск команда:

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/AFFINITY ] [/WAIT] [/B] [command/program]
  [parameters]

Экзамен:

start /b aaa.bat
start /b bbb.bat
Комментарии (0)

Для вызова .файл BAT в `.bat файл, используйте

call foo.bat

(Да, это глупо, было бы больше смысла, если вы могли бы назвать это с `Foo.летучая мышь, как можно из командной строки, но правильный способ-это использовать "вызов".)

Комментарии (0)

Глядя на ваши имена, вы рассматривали с помощью инструмента построить как Нант или муравей (Java-версия). Вы'll получить гораздо больше контроля, чем с bat файлы.

Комментарии (0)
Start msbuild.bat
Start unit-tests.bat
Start deploy.bat

Если это не't работа, замените "старт" с вызов или попробуйте это:

Start msbuild.bat
Goto :1
:1
Start unit-tests.bat
Goto :2
:2
Start deploy.bat
Комментарии (0)

Если вы хотите открыть много пакетных файлов сразу вы можете использовать команды вызова. Тем не менее, команда вызова закрывает текущий файл BAT и уходит к другому. Если вы хотите открыть сразу все, вы можете хотеть попробовать это:

@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat"

И так далее и повторите пуск команду cmd в"призыв`..." и однако для многих файлов. Это работает для окна&ампер;усилитель; nbsp;7, но я не уверен, о других системах.

Комментарии (0)

Запуск нескольких скриптов в одном я была такая же проблема. Я держал его умирать в первый раз не понимая, что он выходил на первый сценарий.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

:: ScriptA.bat
Do Foo
EXIT
::ScriptB.bat
Do bar
EXIT

Я удалил все 11 моих скриптов линии выхода и попытался снова и все 11 побежал по одному за раз в том же окне командной строки.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar
Комментарии (2)

Просто используйте команду звонок! Вот пример:

call msbuild.bat
call unit-tests.bat
call deploy.bat
Комментарии (0)

С правильной ссылкой (Это может быть иногда сложно):

start "" /D "C:\Program Files\ProgramToLaunch" "cmd.exe" "/c call ""C:\Program Files\ProgramToLaunch\programname.bat"""

1-й параметр - название (пустая в данном случае)<БР> 2-й арг - /D задает начальный каталог, может быть опущен, если требуется, чтобы текущая работа реж (таких как "%~dp0" в)<БР> 3й параметр - команда для запуска "и УМК.ехе" и<БР> 4-е арг - аргументы команды, с удвоенными цитаты для аргументов в этом (это, как вы бежать цитаты в кавычки в пакете)

Комментарии (0)

Вот мой способ =

cmd /c ""Path_Bat_Here.bat" %ARG%"
:: Or =
Call *.bat

Помочь = КМД /?

Комментарии (0)

Следующий решена моя проблема:

start call "batch1.bat"
start call "batch2.bat"
Комментарии (0)