Как запустить пакетный сценарий из пакетного сценария?

97

Как вызвать другой пакетный сценарий из пакетного сценария?

Я хочу, чтобы это выполнялось в ifзаявлении.

Кев
источник

Ответы:

222

Использовать CALLкак в

CALL nameOfOtherFile.bat

Это заблокирует (приостановит) выполнение текущего командного файла и будет ждать, пока CALLне завершится редактирование.

Если вы не хотите, чтобы он блокировался, используйте STARTвместо этого.

Получите подробные сведения, используя CALL /?или START /?из командной строки.

yhw42
источник
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!
Дэн Фабулич
источник
8

Вы должны использовать CALL

CALL batch.bat
Юнес ТАРЧУН
источник
2

Ты можешь использовать

call script.bat

или просто

script.bat
Элайджа Саункин
источник
5
Если вы напрямую вызываете другой сценарий в своем сценарии, в случае, если какая-либо команда в вызываемом сценарии возвращает ненулевое значение (ошибку), вызываемый сценарий также перестанет выполняться, а при использовании callон продолжит выполнение даже с ошибкой. в вызываемом скрипте.
Бруно Фингер,
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.

GChuf
источник
Есть ли способ передать все ошибки из каждого из этих сценариев обратно в основной вывод сценария?
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