D'attente Pour les Commandes à Terminer
J'ai un Windows fichier batch qui lance d'autres fichiers batch. Comment dois-je attendre que tous les autres fichiers de commandes avant la fin de l'exécution de quelque chose dans le premier lot? Je ne peux pas utiliser /attendre parce que j'ai besoin des autres commandes à exécuter en parallèle.
Pourriez-vous envoyer un peu de code? Il n'est pas clair pour moi quel est ton problème.
utilisez-vous
utilisez-vous
call ...
de lancer les autres lots?OriginalL'auteur anderson | 2011-08-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser plusieurs drapeaux, l'un par fichier de commandes. Par exemple:
Premier fichier de commandes créer Flagfile.1 lors de l'entrée et de la supprimer avant la fin, et de la même manière que le repos simultané des fichiers batch (Flagfile.2,...)
Le fichier principal doit attendre que tous flagfiles disparaître. Par exemple, dans le fichier Principal:
Dans un Lot de fichier, par exemple Batch1:
+1, Pourquoi le bas de vote en effet, surtout depuis que c'est la seule réponse que fait répond à la question. Mieux vaut avoir le fichier principal de créer le flagfile. Le script principal peut commencer les tests avant le processus enfants ont terminé l'initialisation.
J'ADORE! Dans VS, nous avons été à l'aide de
CALL
dans chaque projet de service après-créer un événement pour télécharger de chacun *.cs fichier de référence pour les stocker dans un autre projet qui contient tous pour un montage simple référence. J'ai juste couru à traversSTART /b /i
et découvert que je pouvais courir tous en même temps, la même fenêtre, n'affectant pas les uns les autres. Si doux. Ensuite, j'ai été comme comment diable puis-je utiliserMSBuild
après qu'elles aient terminé de construire ce projet de service, de sorte que les projets de référence de son assemblée sont automatiquement mis à jour. BOOM!OriginalL'auteur Aacini
Ma suggestion est d'utiliser
CALL
de commande. Un exemple de Les Fichiers Batch:Batch1.chauve-souris d'inscription:
où Batch2.chauve-souris d'inscription est de:
EDIT: sur la base des commentaires de @Andriy M, ici est une version améliorée pour les deux lots:
Lot 1:
Lot 2:
Voir la ligne en batch1 où j'ai écrit le commentaire tester cette ligne avec APPEL et sans. Exécuter ce lot de deux fois, avec cette ligne ayant
CALL
et sansCALL
.La sortie de la console sans
CALL
:Et maintenant la sortie de la console avec
CALL
:Veuillez noter la différence: nous obtenons la 2ème écho, q.e.d.
M: d'après ce que j'ai vécu jusqu'à présent, c'est pas donc, sans APPEL d'exécution renvoie immédiatement à la ligne suivante, sans attendre que l'appelé a lot/commande à la fin (peut-être que vous devriez essayer ça avec de longues opérations).
C'est tellement étrange que j'ai eu à vérifier mon attente à l'aide de votre très des exemples de scripts. J'ai couru le premier lot à partir de l'invite de commande dans Windows 7 SP1 et les deux scripts travaillé pour moi tout comme je l'avais pensé, c'est à dire l'exécution terminée après
batch2.bat
résilié lorsqu'il est appelé pour la deuxième fois. Qui est, la dernière ligne debatch1.bat
ne s'est pas exécuté. Qu'avez-vous testé sur que vous dire que, sans APPEL, l'exécution de revenir à la première fournée, et sans attendre trop?Si un fichier de commandes exécuter un autre sans APPEL, l'effet net est équivalent à un "goto vers un autre fichier": lorsque le deuxième fichier se termine, l'ensemble de la fin de l'exécution. Je l'ai appelé "Superposition" d'un fichier de commandes exécutées de cette manière.
-1, Cette "solution" fait complètement abstraction de l'OP du désir d'avoir un script batch de lancement de plusieurs enfants scripts en parallèle, et attendre pour eux à la fin.
OriginalL'auteur woohoo