Weiß jemand, ob es ein Cmd-Skript gibt, das dies tut, und / oder ein Befehlszeilenprogramm, das für den Job bereit ist?
Weiß jemand, ob es ein Cmd-Skript gibt, das dies tut, und / oder ein Befehlszeilenprogramm, das für den Job bereit ist?
Antworten:
Erstellen Sie die drei folgenden Batchdateien. Main.bat startet 1.bat und 2.bat
1.bat und 2.bat schreiben temporäre Dateien aus, nach denen main.bat sucht. Während 1.bat und 2.bat arbeiten, meldet main.bat, dass die Verarbeitung noch stattfindet. Wenn Sie im geöffneten Fenster von 1.bat oder 2.bat die Eingabetaste drücken, wird die temporäre Datei gelöscht und das Programm beendet. Dies simuliert das Stoppen der Verarbeitung für diese .bat-Datei. Wenn Sie dies sowohl für 1 als auch für 2.bat tun, meldet Ihnen main.bat, dass die Verarbeitung für diese Prozesse abgeschlossen ist. Sie können 1.bat und 2.bat dazu bringen, alles zu tun, was Sie wollen, solange Sie die temporäre Datei löschen, wenn Sie fertig sind. An diesem Punkt kann main.bat alles tun, was Sie wollen.
1. Fledermaus
echo %time% > 1.tmp
pause
del 1.tmp
exit
2. Fledermaus
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!
Einfach genug, vorausgesetzt, die Prozesse benötigen keine Standardeingabe oder -ausgabe. Über die Befehlszeile oder in einer Batchdatei:
process1 | process2 | process3 | process4
Dadurch werden alle vier Prozesse gleichzeitig ausgeführt und erst dann zurückgegeben, wenn alle beendet wurden. (Mögliche Ausnahme: Wenn ein Prozess die Standardausgabe explizit schließt, wird er möglicherweise so behandelt, als wäre er beendet worden. Aber das ist ungewöhnlich, nur sehr wenige Prozesse tun dies.)
Ich bin mir nicht sicher, wie viele Prozesse Sie auf diese Weise gleichzeitig starten können. Ich habe bis zu zehn ausprobiert.
Die einzige Möglichkeit, dies zu tun, besteht darin, separate Batchdateien (siehe start /?
) zu starten , in denen die einzelne Aufgabe ausgeführt wird, und nach Abschluss eine Textdatei zu schreiben. Anschließend überprüfen Sie regelmäßig, ob die Textdateien erstellt wurden.
Sie können sich das Cmdlet Powershell Start-Job ansehen. Es sollte Ihnen erlauben, dies zu tun. Mehr hier Powershell ist die Shell von Microsoft. Es ist viel leistungsfähiger als Cmd-Skripte und belastet die Investition Ihrer Zeit
Oder Sie können dies verwenden: http://www.out-web.net/?p=167
Ich habe es getan, es funktioniert, aber es kommt manchmal vor, dass die PID des fertigen Prozesses sofort von einem anderen Windows-Prozess wiederverwendet wird, der gerade gestartet wurde, und es macht die Erkennung des Endes Ihres Prozesses gefährlich / fehlerhaft.
Ich suchte auch nach einer ähnlichen Aufgabe. Ziel war es, mehrere Befehle parallel auszuführen und die Ausgabe (stdout & error) aller parallelen Prozesse zu extrahieren. Warten Sie dann, bis alle parallelen Prozesse abgeschlossen sind, und führen Sie einen weiteren Befehl aus. Es folgt ein Beispielcode für eine BAT-Datei, die in CMD ausgeführt werden kann:
(
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
Alle darin enthaltenen Anweisungen ()
werden zuerst ausgeführt, warten Sie, bis sie abgeschlossen sind, und dann werden die letzten beiden Zeilen ausgeführt. Alle Befehle, die mit beginnen, start
werden gleichzeitig ausgeführt.
Diese Links sind hilfreich: /programming//a/43762349/9689416 und https://ss64.com/nt/start.html