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.

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.


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!


2

Você pode usar

call script.bat

ou apenas

script.bat

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"

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.


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

-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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.