Comment appeler un autre script batch depuis un script batch?
Je veux qu'il s'exécute dans une instruction if
.
Utilisez CALL
comme dans
CALL nameOfOtherFile.bat
Ceci bloquera (mettra en pause) l'exécution du fichier de commandes actuel et attendra que le fichier CALL
ed soit terminé.
Si vous ne souhaitez pas le bloquer, utilisez plutôt START
.
Obtenez les détails pratiques en utilisant CALL /?
ou START /?
de l'invite cmd.
Vous pouvez simplement appeler le script batch par son nom, comme si vous utilisiez la ligne de commande.
Supposons donc que vous avez un fichier bar.bat
ça dit echo This is bar.bat!
et vous voulez l'appeler à partir d'un fichier foo.bat
, vous pouvez écrire ceci dans foo.bat
:
if "%1"=="blah" bar
Courir foo blah
à partir 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 méfiez-vous: Lorsque vous appelez un script de commande à partir d'un autre script de commande, le script de commande d'origine s'arrête. Si vous souhaitez exécuter le script de traitement par lots secondaire, puis revenir au script de traitement par lots précédent, vous devez utiliser la commande call
. Par exemple:
if "%1"=="blah" call bar
echo That's all for foo.bat!
Si vous exécutez foo blah
là-dessus, vous verriez:
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!
Vous devriez utiliser CALL
CALL batch.bat
Vous pouvez utiliser
call script.bat
ou juste
script.bat
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 à partir de a.bat:
@echo off
echo "This is b.bat"
Si vous souhaitez ouvrir le fichier de commandes dans une autre fenêtre, utilisez start
. De cette façon, vous pouvez exécuter deux scripts en même temps. En d'autres termes, vous n'avez pas à attendre le script que vous venez d'appeler pour terminer. Tous les exemples ci-dessous fonctionnent:
start batch.bat
start call batch.bat
start cmd /c batch.bat
Si vous voulez attendre que le script se termine, essayez start /w call batch.bat
, mais le fichier batch.bat doit se terminer par exit
.