Запуск пакетных файлов последовательно
Я хочу спросить вас, как последовательно запускать пакетные файлы в Windows.
Я пробовал:
start /w batchfile_1.bat
start /w batchfile_2.bat
..
start /w batchfile_n.bat
но я должен закрыть предыдущий файл .bat файла вручную (например, щелкнув), прежде чем перейти к следующему.
Есть ли какое-либо решение для этого автоматически, если я не буду вручную закрывать предыдущую .bat-программу каждый раз?
Большое спасибо.
Ответы
Ответ 1
Я бы проверял решения на этот вопрос: Запустить несколько пакетных файлов
- Взято из ответа по ссылке.
Использовать вызов:
call bat1.cmd
call bat2.cmd
По умолчанию, когда вы просто запускаете командный файл из другого, элемент управления не будет возвращаться к вызывающему. Для этого вам нужно использовать вызов.
В принципе, если у вас такая партия:
@echo off
echo Foo
batch2.cmd
echo Bar
то он будет выводить только
Foo
Если вы пишете его как
@echo off
echo Foo
call batch2.cmd
echo Bar
однако он выведет
Foo
Bar
поскольку после завершения пакетной обработки 2, программный контроль передается обратно в исходный пакетный файл.
Ответ 2
Если вы любите использовать START
, вы могли бы закончить командный файл командой EXIT
. Это закроет окна, созданные командой START
.
@echo off
.
.
:: Inspired coding
.
.
exit
Ответ 3
Я не уверен, но, основываясь на ваших комментариях, похоже, что происходит, когда вы запускаете эту последовательность команд START
:
-
Команда START /W
вызывается и запускает командный файл.
-
Пакетный файл запускает выполнение и запускает программу.
-
Пакетный файл заканчивается, и его консольное окно остается открытым, но программа продолжает работать.
-
Команда START /W
, которая использовалась для запуска командного файла, все еще выполняется, поскольку окно консоли остается открытым.
-
Вы ждете, пока программа не завершится, затем вы закроете окно консоли, а затем вызывается следующая команда START /W
, и все повторяется.
Теперь, если вы поместите EXIT
в конец каждого командного файла, который вы хотите запустить последовательно, это ухудшает ситуацию, поскольку оно завершает закрытие окна консоли после завершения пакета script, а это, в свою очередь, завершает соответствующую команду START /W
и вызывает выполнение другого, даже если программа, запущенная пакетом script, все еще может работать. И поэтому эффект заключается в том, что пакетные скрипты (или, скорее, выполняемые ими программы) выполняются одновременно, а не последовательно.
Я думаю, что если это вообще можно решить, вам нужно переместить команду START /W
и поместить ее в каждый командный файл перед (каждой) командой, которую выполняет пакетный файл, и не ждет завершения из. То есть, если ваш batchfile_1.bat
запускает program.exe
, измените командную строку на START /W program.exe
и аналогично для других соответствующих команд в других командных файлах.