Como executo um script em lote a partir de um script em lote?

97

Como faço para chamar outro script de lote de dentro de um script de lote?

Quero que seja executado em uma ifdeclaração.

Kev
fonte

Respostas:

219

Use CALLcomo em

CALL nameOfOtherFile.bat

Isso bloqueará (pausará) a execução do arquivo em lote atual e esperará até que a CALLedição seja concluída.

Se você não quiser bloquear, use START.

Obtenha os detalhes essenciais usando CALL /?ou START /?no prompt do cmd.

yhw42
fonte
22

Você pode simplesmente invocar o script em lote pelo nome, como se estivesse executando na linha de comando.

Então, suponha que você tenha um arquivo bar.batque diz echo This is bar.bat!e deseja chamá-lo de um arquivo foo.bat, você pode escrever isso em foo.bat:

if "%1"=="blah" bar

Execute a foo blahpartir da linha de comando e você verá:

C:\>foo blah

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

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

Mas cuidado : quando você invoca um script em lote de outro script em lote, o script em lote original para de ser executado. Se quiser executar o script de lote secundário e depois retornar ao script de lote anterior, você terá que usar o callcomando. Por exemplo:

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

Se você correr foo blahnisso, verá:

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!
Dan Fabulich
fonte
8

Você deve usar CALL

CALL batch.bat
Younes TARCHOUN
fonte
2

Você pode usar

call script.bat

ou apenas

script.bat
Elijah Saounkine
fonte
5
Se você chamar outro script diretamente dentro do seu script, caso algum comando no script chamado retorne um valor diferente de zero (erro), o script callee irá parar de executar também, onde usando call, ele continuará sua execução mesmo com um erro no script chamado.
Bruno Finger,
1

Aqui está um exemplo:

Você tem a.bat:

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

e b.bat chamado condicionalmente de a.bat:

@echo off 
echo "This is b.bat"
Stanik
fonte
1

Se você deseja abrir o arquivo em lote em outra janela, use start. Dessa forma, você pode basicamente executar dois scripts ao mesmo tempo. Em outras palavras, você não precisa esperar o script que acabou de chamar terminar. Todos os exemplos abaixo funcionam:

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

Se você quiser esperar a conclusão do script, tente start /w call batch.bat, mas o batch.bat precisa terminar com exit.

hextech
fonte
Existe uma maneira de canalizar todos os erros de cada um desses scripts de volta para a saída do script principal?
gunslingor
0

Execute paralelamente em janelas de comando separadas em estado minimizado

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

Executar sequencialmente na mesma janela

release.bat

call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat
Minhas Kamal
fonte
-3

huh, eu não sei por que, mas a chamada não
call script.batfuncionou, não retornou ao console original.
cmd /k script.batretornou ao console original.

Steven
fonte
2
Considere editar sua pergunta para explicar mais formalmente o que não funcionou e o que funcionou, incluindo o código não funcional e o código funcional
wundermahn