Quelqu'un sait-il s'il existe un script cmd qui le fait et / ou un outil de ligne de commande prêt pour le travail?
Quelqu'un sait-il s'il existe un script cmd qui le fait et / ou un outil de ligne de commande prêt pour le travail?
Réponses:
Créez les trois fichiers batch ci-dessous. Main.bat lance 1.bat et 2.bat
1.bat et 2.bat écrivent des fichiers temporaires pour lesquels main.bat vérifie. Pendant que 1.bat et 2.bat fonctionnent, main.bat signale que le traitement est toujours en cours. Lorsque vous appuyez sur Entrée dans la fenêtre ouverte de 1.bat ou 2.bat, le fichier temporaire est supprimé et le programme se ferme. Cela simule l'arrêt du traitement pour ce fichier .bat. Si vous procédez ainsi pour 1 et 2.bat, main.bat vous signale que le traitement est terminé pour ces processus. Vous pouvez faire 1.bat et 2.bat faire ce que vous voulez, tant que vous effacez le fichier temporaire lorsque vous avez terminé. À ce stade, main.bat peut également faire tout ce que vous voulez.
1.bat
echo %time% > 1.tmp
pause
del 1.tmp
exit
2.bat
echo %time% > 2.tmp
pause
del 2.tmp
exit
main.bat
@echo off
start "1" 1.bat
start "2" 2.bat
@ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
@ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!
Assez simple, à condition que les processus n'aient pas besoin d'entrée ou de sortie standard. Depuis la ligne de commande ou dans un fichier batch:
process1 | process2 | process3 | process4
Cela exécutera les quatre processus simultanément et ne reviendra pas tant qu'ils ne seront pas tous terminés. (Exception possible: si un processus ferme explicitement la sortie standard, il peut être traité comme s'il s'était arrêté. Mais c'est inhabituel, très peu de processus le font.)
Je ne sais pas exactement combien de processus vous pouvez lancer simultanément de cette façon. J'en ai essayé jusqu'à dix.
La seule façon de procéder consiste à démarrer des fichiers de commandes séparés (voir start /?
) qui exécutent la tâche individuelle et à écrire un fichier texte à la fin. Ensuite, vous vérifiez périodiquement si les fichiers texte ont été créés.
Vous pouvez consulter la cmdlet Powershell Start-Job. Cela devrait vous permettre de le faire. Plus ici Powershell est le shell de choix de Microsoft. Il est beaucoup plus puissant que les scripts cmd et investit bien votre temps
Ou vous pouvez utiliser ceci: http://www.out-web.net/?p=167
Je l'ai fait, cela fonctionne, mais il arrive parfois que le PID du processus terminé soit immédiatement réutilisé par un autre processus Windows qui vient de démarrer, et cela rend la détection de la fin de votre processus dangereuse / erronée.
Je cherchais également une tâche similaire. L'objectif était d'exécuter plusieurs commandes en parallèle et d'extraire la sortie (stdout & error) de tous les processus parallèles. Attendez ensuite que tous les processus parallèles se terminent et exécutez une autre commande. Voici un exemple de code pour le fichier BAT, qui peut être exécuté dans CMD:
(
start "" /B cmd /c ping localhost -n 6 ^>nul
timeout /t 5 /nobreak
start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1
start "" /B cmd /c ping localhost -n 11 ^>nul
timeout /t 10 /nobreak
) | pause
Echo waited
timeout /t 12 /nobreak
Toutes les instructions à l'intérieur ()
sont exécutées en premier, attendez qu'elles se terminent, puis les deux dernières lignes sont exécutées. Toutes les commandes commençant par start
sont exécutées simultanément.
Ces liens sont utiles: /programming//a/43762349/9689416 et https://ss64.com/nt/start.html