Comment puis-je exécuter un script de commandes à partir d’un script de traitement par lots?

Comment appeler un autre script de traitement par lot à partir d’un script de traitement par lots?

Je veux qu’il s’exécute dans une instruction if .

Utilisez CALL comme dans

 CALL nameOfOtherFile.bat 

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

Si vous ne voulez pas le bloquer, utilisez START place.

Obtenez les détails Nitty Gritty en utilisant CALL /? ou START /? à partir de l’invite cmd.

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

Donc, supposons que vous avez un fichier bar.bat qui dit echo This is bar.bat! et vous voulez l’appeler depuis un fichier foo.bat , vous pouvez écrire ceci dans foo.bat :

 if "%1"=="blah" bar 

Exécutez foo blah depuis 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éfiezvous : lorsque vous appelez un script de traitement par lots à partir d’un autre script de traitement par lots, le script de commandes d’origine cesse de s’exécuter. Si vous souhaitez exécuter le script de traitement secondaire puis revenir au script de traitement précédent, vous devez utiliser la commande d’ call . Par exemple:

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

Si vous exécutez foo blah sur cela, 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 l’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"