Dire, si j’ai
- foo.exe
- bar.exe
- Baz.exe
Comment faire tous partir d’un fichier batch de manière asynchrone, c'est-à-dire sans attendre le blocage du programme précédent ?
Dire, si j’ai
Comment faire tous partir d’un fichier batch de manière asynchrone, c'est-à-dire sans attendre le blocage du programme précédent ?
À l’aide de `` commande à exécuter chaque programme, vous devriez obtenir ce dont vous avez besoin.
Chaque invocation s’exécute la commande donnée dans son paramètre et retourne immédiatement, sauf s’il est exécuté avec un
passer.
Cela vaut pour les applications de ligne de commande. Applications sans ligne de commande retournent immédiatement de toute façon, alors bien sûr, si vous voulez exécuter tout de façon asynchrone, utilisez `` .
Alliant un couple de la réponse à la question précédente, vous pourriez essayer d' start /b cmd /c foo.exe
.
Pour un exemple trivial, si vous voulez imprimer les versions de java/groovy/graal/gradle, vous pourriez le faire dans un fichier batch:
@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version
Si vous avez quelque chose comme Process Explorer de Sysinternals), vous verrez quelques-enfant cmd.exe les processus de chaque avec un processus java (comme pour les commandes ci-dessus). La sortie d'impression à l'écran dans l'ordre de leur arrivée.
start /b : Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application
cmd /c : Carries out the command specified by string and then terminates
Créez un fichier batch contenant les lignes suivantes :
La commande start exécute votre commande dans une nouvelle fenêtre, donc toutes les 3 commandes seraient exécutée de façon asynchrone.
Il y a une troisième (et peut-être même beaucoup plus facile). Si vous voulez faire tourner plusieurs instances d'un même programme, à l'aide d'une commande de style Unix, processeur comme Xargs ou GNU Parallèle peut en faire un processus relativement simple.
Il y a un win32 Xargs clone appelé PPX2 qui rend ce assez simple.
Par exemple, si vous souhaitez transcoder un répertoire de fichiers vidéo, vous pouvez exécuter la commande:
dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
La cueillette en dehors de cela, dir /b *.mpg
s'empare d'une liste de .mpg fichiers dans mon répertoire courant, l' |
opérateur de tuyaux de cette liste en ppx2, qui établit alors une série de commandes qui doivent être exécutées en parallèle; 4 à la fois, comme indiqué ici par l' -P 4
de l'opérateur. L' -L 1
opérateur indique ppx2 de n'envoyer qu'une seule ligne de notre inscription à l'annuaire pour ffmpeg à la fois.
Après cela, il vous suffit d'écrire votre ligne de commande (ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
), et {}
est automatiquement remplacé pour chaque ligne de votre liste de répertoires.
Il n'est pas universellement applicable à tous les cas, mais est beaucoup plus facile que d'utiliser le fichier de commandes des solutions de contournement décrite ci-dessus. Bien sûr, si vous n'êtes pas affaire avec une liste de fichiers, vous pouvez aussi diriger le contenu d'un fichier texte ou tout autre programme dans l'entrée de pxx2.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.