Come si esegue uno script batch da uno script batch?


97

Come posso chiamare un altro script batch dall'interno di uno script batch?

Voglio che venga eseguito in una ifdichiarazione.

Risposte:


219

Usa CALLcome in

CALL nameOfOtherFile.bat

Ciò bloccherà (sospenderà) l'esecuzione del file batch corrente e attenderà fino al CALLcompletamento di quello modificato.

Se non vuoi che si blocchi, usa STARTinvece.

Ottieni i dettagli nitidi utilizzando CALL /?o START /?dal prompt di cmd.


22

Puoi semplicemente richiamare lo script batch per nome, come se fossi in esecuzione sulla riga di comando.

Quindi, supponi di avere un file bar.batche dice echo This is bar.bat!e vuoi chiamarlo da un file foo.bat, puoi scrivere questo in foo.bat:

if "%1"=="blah" bar

Esegui foo blahdalla riga di comando e vedrai:

C:\>foo blah

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

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

Ma attenzione : quando si richiama uno script batch da un altro script batch, lo script batch originale smetterà di funzionare. Se desideri eseguire lo script batch secondario e quindi tornare allo script batch precedente, dovrai utilizzare il callcomando. Per esempio:

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

Se corri foo blahsu quello, vedresti:

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

Puoi usare

call script.bat

o semplicemente

script.bat

5
Se chiami direttamente un altro script all'interno del tuo script, nel caso in cui qualsiasi comando nello script chiamato restituisca un valore diverso da zero (errore), anche lo script chiamato si interromperà, se in uso callcontinuerà la sua esecuzione anche con un errore nello script chiamato.
Bruno Finger

1

Ecco un esempio:

Hai un pipistrello:

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

e b.bat chiamato condizionatamente da a.bat:

@echo off 
echo "This is b.bat"

1

Se desideri aprire il file batch in un'altra finestra, usa start. In questo modo, puoi fondamentalmente eseguire due script contemporaneamente. In altre parole, non devi aspettare che lo script che hai appena chiamato finisca. Tutti gli esempi seguenti funzionano:

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

Se vuoi aspettare che lo script finisca, prova start /w call batch.bat, ma batch.bat deve finire con exit.


C'è un modo per reindirizzare tutti gli errori da ciascuno di questi script all'output dello script principale?
pistolero

0

Esegui parallelamente su finestre di comando separate in stato ridotto a icona

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

Esegui sequenzialmente sulla stessa finestra

release.bat

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

-3

eh, non so perché, ma la chiamata non ha funzionato, il trucco
call script.batnon è tornato alla console originale.
cmd /k script.batè tornato alla console originale.


2
Valuta la possibilità di modificare la tua domanda per spiegare in modo più formale cosa non ha funzionato e cosa ha funzionato, incluso il codice non funzionante e il codice funzionante
wundermahn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.