Как вызвать один пакетный файл за другим - PullRequest
28 голосов
/ 30 марта 2011

У меня есть пакетный файл, который я тестирую, все, что я хочу сделать, это следующее

CALL ping.bat

Затем, после запуска этого пакетного файла, я хочу запустить другой файл:

CALL ping2.bat

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

CALL ping.bat
CALL ping2.bat

Ping .bat это просто:

ping 127.0.0.1    

Ответы [ 6 ]

18 голосов
/ 30 марта 2011

Убедитесь, что у вас нет exit где-то в первой партии. Некоторые люди обычно используют это, чтобы выпрыгнуть из пакетного файла, который не является правильным способом выхода из пакета (exit /b или goto :eof is).

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

6 голосов
/ 31 марта 2011

Есть вероятность, что ваш ping.bat просто вызывает себя, если его содержимое просто, как вы говорите, ping 127.0.0.1.

Я бы добавил .exe после ping, чтобы убедиться.

Поскольку jeb во что бы то ни стало справедливо предложено, выбор другого имени для вашего командного файла - еще лучшее решение.

5 голосов
/ 14 февраля 2014

Предположим, у вас есть 3 пакетных файла.

  1. ping1.bat с содержимым ping 127.0.0.1
  2. ping2.bat с содержимым ping 127.0.0.1
  3. ping3.bat с нижеуказаннымдве строки
    call ping1.bat
    call ping2.bat

Если у вас есть все три пакетных файла в одной папке (скажем, в C: \ NewFolder), тогда выдважды щелкните ping3.bat, вы наверняка не получите никакой ошибки.

Примечание. Если вы не хотите ждать завершения первой команды, используйте ключевое слово start, которое просто запускает процесс и продолжаетсо следующей строкой в ​​пакетном файле, тогда как call будет делать это последовательно (переход к следующей строке только после завершения текущего процесса, start допускает параллелизм)
Чтобы сделать это параллельно, используйте две нижеприведенные строки кода в ping3.bat:

start ping1.bat
start ping2.bat

2 голосов
/ 05 ноября 2013

Не совсем уверен, что вы хотели сделать здесь, но я предполагаю, что вы хотели сделать это:

  1. запустить FIRST.bat
  2. с FIRST.bat вы хотите позвонить SECOND.bat
  3. Пока выполняется SECOND.bat, FIRST.bat должен оставаться в режиме паузы
  4. После того, как SECOND.bat завершит свое выполнение, FIRST.bat должен возобновить работу и вызвать THIRD.bat

В этом случае из вашего фактического пакетного файла вы должны запустить ping.bat и ping2.bat следующим образом:

::some code here
start /wait ping.bat
start /wait ping2.bat
::some code here

Затем в ping.bat и ping2.bat последняя строка должна быть exit . Их код должен выглядеть так:

::some code here, might be ping 127.0.0.1
exit

Так что теперь ваш фактический пакетный файл запустится ping.bat и будет ждать его завершения (выход). Как только ping.bat закроется, ваш фактический пакетный файл перейдет на следующую строку и запустится ping2.bat и т. Д.

2 голосов
/ 31 марта 2011

не называйте файл, который вы вызываете из пакета, тем же именем, что и команда, которую вы пытаетесь вызвать ... переименована в gnip.bat и работает нормально

0 голосов
/ 14 февраля 2014

Команда ping действует по-разному в разных операционных системах. Попробуйте принудительно остановить команду ping после нескольких эхо-запросов с ключом -n.

ping -n 4 127.0.0.1

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