Comment exécuter un script batch à partir d'un script batch?


97

Comment appeler un autre script batch à partir d'un script batch?

Je veux qu'il s'exécute dans une ifinstruction.

Réponses:


219

Utiliser CALLcomme dans

CALL nameOfOtherFile.bat

Cela bloquera (interrompra) l'exécution du fichier de commandes en cours et attendra la fin de l' CALLed.

Si vous ne voulez pas qu'il se bloque, utilisez à la STARTplace.

Obtenez les détails les plus précis en utilisant CALL /?ou à START /?partir de l'invite cmd.


22

Vous pouvez simplement appeler le script batch par son nom, comme si vous exécutiez sur la ligne de commande.

Donc, supposons que vous ayez un fichier bar.batqui dit echo This is bar.bat!et que vous vouliez l'appeler à partir d'un fichier foo.bat, vous pouvez l'écrire dans foo.bat:

if "%1"=="blah" bar

Exécutez à foo blahpartir de la ligne de commande et vous verrez:

C:\>foo blah

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

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

Mais attention : lorsque vous appelez un script batch à partir d'un autre script batch, le script batch d'origine s'arrêtera de s'exécuter. Si vous souhaitez exécuter le script de traitement par lots secondaire, puis revenir au script de traitement par lots précédent, vous devrez utiliser la callcommande. Par exemple:

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

Si vous exécutez foo blahsur cela, vous verrez:

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

Vous pouvez utiliser

call script.bat

ou juste

script.bat

5
Si vous appelez directement un autre script dans votre script, au cas où une commande dans le script appelé renvoie une valeur non nulle (erreur), le script appelé s'arrêtera également pour s'exécuter, où en utilisant call, il continuera son exécution même avec une erreur dans le script appelé.
Bruno Finger

1

Voici un exemple:

Vous avez un.bat:

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

et b.bat appelé conditionnellement depuis a.bat:

@echo off 
echo "This is b.bat"

1

Si vous souhaitez ouvrir le fichier de commandes dans une autre fenêtre, utilisez start. De cette façon, vous pouvez essentiellement exécuter deux scripts en même temps. En d'autres termes, vous n'avez pas à attendre la fin du script que vous venez d'appeler. Tous les exemples ci-dessous fonctionnent:

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

Si vous voulez attendre la fin du script, essayez start /w call batch.bat, mais le batch.bat doit se terminer par exit.


Existe-t-il un moyen de rediriger toutes les erreurs de chacun de ces scripts vers la sortie du script principal?
gunslingor

0

Exécuter parallèlement sur des fenêtres de commande séparées dans un état réduit

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

Exécuter séquentiellement sur la même fenêtre

release.bat

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

-3

hein, je ne sais pas pourquoi, mais l'appel n'a pas fait l'affaire
call script.batn'est pas revenu à la console d'origine.
cmd /k script.batest revenu à la console d'origine.


2
Envisagez de modifier votre question pour expliquer plus formellement ce qui n'a pas fonctionné et ce qui a fonctionné, y compris le code non fonctionnel et le code fonctionnel
wundermahn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.