Я хочу запустить 2 .bat файла из другого .bat файла - PullRequest
0 голосов
/ 07 декабря 2018

bat-файлов из другого файла Main.bat

Файлы содержат что-то вроде следующего, и я хочу, чтобы оба запускались с задержкой в ​​15 секунд и оставались до тех пор, пока я не закрою каждый из них с помощью "Ctrl + C", могукто-то, пожалуйста, помогите мне с этим вариантом использования, пожалуйста.

Main.bat

echo Task-1:
call C:\Users\user\bat\My_bat1.bat

echo Task-2:
call C:\Users\user\bat\My_bat2.bat

My_bat1.bat

start /wait cmd.exe /k "cd PATH && mvn -P dev"

My_bat2.bat

start /wait cmd.exe /k "cd PATH && mvn -Dspring.profiles.active=dev,swagger,no-liquibase -Dspring.cloud.config.profile=dev -DskipTests=true"

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

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

Я постараюсь собрать воедино то, что вы хотите:

  • Запустите задание 1, создав новое окно
  • Не ждите завершения задания 1, подождите 15 секунд
  • Запустите задание 2, создав новое окно
  • Если вы нажмете Ctrl + C в любом окне, это должно остановить работу и закрыть окно
  • Я предполагаю, что если одно задание завершается до или после запуска другого, другое все равно нужно запустить или продолжитьработа.

Прежде всего, программа, которая в данный момент запускается - в вашем случае, которая выглядит как maven - на самом деле получает Ctrl+C и решает, как она будет действовать на нее.Я не уверен, если это так, как вы хотите.

Main.bat

echo Task-1:
"%comspec%" /c "C:\Users\user\bat\My_bat1.bat"

timeout 15 /nobreak

echo Task-2:
"%comspec%" /c "C:\Users\user\bat\My_bat2.bat"

Я добавил команду timeout между запусками.Это ждет 15 секунд.Если вы удалите /nobreak, можно было бы также прервать ожидание с помощью задачи № 2 по быстрому запуску клавиатуры раньше

. Я считаю, что call иногда приводит к странным ошибкам в таких случаях, поэтому я предпочитаю "%comspec%" /c.Он делает то же самое, за исключением того, что не получает обратно переменные среды, заданные в дочернем файле, что хорошо в вашем сценарии.

My_bat1.bat

start "" "%comspec%" /c "cd PATH & mvn -P dev & timeout -1 /nobreak"

Я удалил /wait, что помешаловторой mvn экземпляр от запуска до первого завершения или завершения.

Я заменил /k на /c и добавил timeout для приостановки выполнения вместо /k.

Оператор timeout -1 /nobreak заставляет интерпретатор команд ждать бесконечно без возможности остановить его, за исключением Ctrl+C.

Вы можете удалить /nobreak, чтобы разрешить его закрытие любым нажатием клавиши, если mvn завершился нормально(если это когда-либо произойдет)

"%comspec%" совпадает с cmd.exe, но предпочтительнее, если Microsoft когда-либо решит изменить exe-имя интерпретатора команд.Пустое значение "" before требуется, поскольку start интерпретирует первую строку в двойных кавычках как имя окна.

Я предполагаю, что в текущей папке есть папка с именем PATH, поскольку она не является переменной.Кроме того, переменная %PATH% зарезервирована для списка путей поиска исполняемых файлов / библиотек, и ей нельзя присваивать какое-либо случайное значение или использовать с командой cd, если вы действительно не знаете, что делаете.См. path /?.

Я также использовал & вместо && для предотвращения закрытия окна в случае сбоя mvn.

My_bat2.bat можно изменить аналогичным образом.

0 голосов
/ 08 декабря 2018

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

choice /t 15 /D y /n

Если нет, пожалуйста, уточните свой вопрос?

РЕДАКТИРОВАТЬ:Основываясь на вашем обновлении, вы хотите добавить pause в ваш первый дочерний файл bat, а затем код выше перед командой call в вашем родительском файле bat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...