web-dev-qa-db-fra.com

comment exécuter plusieurs fichiers de commandes en série, dans un environnement de ligne de commande Windows

J'ai un fichier batch, 

bat1.bat
bat2.bat

mais ça s'arrête à la fin de la bat1

des indices?

22
Nick

Utilisez call:

call bat1.cmd
call bat2.cmd

Par défaut, lorsque vous exécutez un fichier de commandes à partir d'un autre contrôleur, celui-ci ne sera pas renvoyé. C'est pourquoi vous devez utiliser call.

En gros, si vous avez un lot comme celui-ci:

@echo off
echo Foo
batch2.cmd
echo Bar

alors il ne sortira que

Foo

Si vous écrivez comme

@echo off
echo Foo
call batch2.cmd
echo Bar

cependant, il va sortir

Foo
Bar

car après la fin de batch2, le contrôle du programme est retransféré dans votre fichier de commandes d'origine.

40
Joey

Cela peut arriver si bat1.bat s’arrête de façon anormale (autre que de s’exécuter jusqu’à la fin, comme si on appelait exit) et que vous pouvez contourner ce problème en utilisant un nouveau cmd.exe pour exécuter chaque fichier bat:

start /b /wait bat1.bat
start /b /wait bat2.bat

Vous pouvez l'omettre pour le dernier si les commandes ne suivent pas dans votre fichier bat.

2
x4u

Si vous souhaitez exécuter les fichiers de commandes en séquence, vous devez mettre "démarrer bat 1.bat" à la fin de chaque fichier.

1
john calhoun

Pour pouvoir exécuter plusieurs fichiers .exe simultanément, vous devez tout d'abord créer un fichier .bat, puis ajouter tous vos fichiers .exe comme indiqué ci-dessous:

  D:\Data\Feed.exe Books.xml
  D:\Data\Feed.exe Mobile.xml
  D:\Data\Feed.exe Clothes.xml

Et puis enregistrez en tant que quelque chose.bat puis lancez-le avec cmd.

1
Riya Ken

Quelque chose d'autre à rechercher:

J'ai eu un problème similaire dans lequel j'appelais plusieurs fichiers de commandes à l'aide de la commande call, mais le contrôle n'a pas été renvoyé dans le fichier .bat d'origine. 

J'ai découvert que j'avais une commande exit à la fin du fichier de commandes qui fermait la fenêtre DOS avant de revenir au fichier .bat d'origine et d'y terminer les commandes.

1
JIm L