Запуск пакетных файлов последовательно

Я хочу спросить вас, как последовательно запускать пакетные файлы в 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 и аналогично для других соответствующих команд в других командных файлах.