Як запустити пакетний сценарій із пакетного сценарію?


97

Як мені викликати інший пакетний сценарій із пакетного сценарію?

Я хочу, щоб це було виконано в ifзаяві.

Відповіді:


219

Використовуйте CALLяк у

CALL nameOfOtherFile.bat

Це заблокує (призупинить) виконання поточного пакетного файлу і зачекає, поки редагований файл CALLне завершиться.

Якщо ви не хочете, щоб його блокували, використовуйте STARTзамість цього.

Отримайте дрібні деталі, використовуючи CALL /?або START /?з підказки cmd.


22

Ви можете просто викликати пакетний сценарій за іменем, ніби ви працюєте в командному рядку.

Отже, припустимо, у вас є файл із bar.batнаписом, echo This is bar.bat!і ви хочете викликати його з файлу foo.bat, ви можете написати це в foo.bat:

if "%1"=="blah" bar

Запустіть foo blahз командного рядка, і ви побачите:

C:\>foo blah

C:\>if "blah" == "blah" bar

C:\>echo This is bar.bat!
This is bar.bat!

Але будьте обережні : коли ви викликаєте пакетний сценарій з іншого пакетного сценарію, оригінальний пакетний сценарій перестане працювати. Якщо ви хочете запустити вторинний пакетний сценарій, а потім повернутися до попереднього пакетного сценарію, вам доведеться скористатися callкомандою. Наприклад:

if "%1"=="blah" call bar
echo That's all for foo.bat!

Якщо ви запустите foo blahна цьому, ви побачите:

C:\>foo blah

C:\>if "blah" == "blah" call bar

C:\>echo This is bar.bat!
This is bar.bat!

C:\>echo That's all for foo.bat!
That's all for foo.bat!


2

Можна використовувати

call script.bat

або просто

script.bat

5
Якщо ви безпосередньо викликаєте інший скрипт у своєму сценарії, у випадку, якщо будь-яка команда у викликаному скрипті повертає ненульове значення (помилка), скрипт, що викликається, також зупиниться для виконання, де, використовуючи call, він продовжить своє виконання навіть з помилкою у викликаному сценарії.
Bruno Finger

1

Ось приклад:

У вас є a.bat:

@echo off
if exist b.bat goto RUNB
goto END
:RUNB
b.bat
:END

та b.bat, викликаний умовно з a.bat:

@echo off 
echo "This is b.bat"

1

Якщо ви хочете відкрити пакетний файл в іншому вікні, використовуйте start. Таким чином, ви можете запустити два сценарії одночасно. Іншими словами, вам не потрібно чекати завершення сценарію, який ви щойно закликали. Усі приклади нижче працюють:

start batch.bat
start call batch.bat
start cmd /c batch.bat

Якщо ви хочете дочекатися закінчення сценарію, спробуйте start /w call batch.bat, але batch.bat повинен закінчуватися exit.


Чи є спосіб повернути всі помилки кожного з цих сценаріїв назад до вихідних даних основного сценарію?
gunslingor

0

Запускайте паралельно на окремих командних вікнах у мінімізованому стані

dayStart.bat

start "startOfficialSoftwares" /min cmd /k call startOfficialSoftwares.bat
start "initCodingEnvironment" /min cmd /k call initCodingEnvironment.bat
start "updateProjectSource" /min cmd /k call updateProjectSource.bat
start "runCoffeeMachine" /min cmd /k call runCoffeeMachine.bat

Запустити послідовно в одному вікні

release.bat

call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat

-3

га, я не знаю чому, але дзвінок не зробив трюку
call script.batне повернувся до початкової консолі.
cmd /k script.batповернувся до початкової консолі.


2
Подумайте над редагуванням свого запитання, щоб більш офіційно пояснити, що не спрацювало, а що зробило, включаючи неробочий код та робочий код
wundermahn,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.