Klingt eher so, als wollten Sie die Powershell 2. Sie können jedoch neue cmd
Windows (oder andere Prozesse) durch Verwendung von start
, siehe auch dies Antwort. Wahrscheinlich müssen Sie aber einige andere Werkzeuge und ein wenig Tricks, um so etwas wie einen "Prozess-Pool" zu erstellen (um nur ein Maximum an von n Instanzen zur gleichen Zeit). Letzteres können Sie erreichen, indem Sie tasklist /im
und zählen, wie viele bereits vorhanden sind ( for
Schleife oder wc
, falls zutreffend) und warten Sie einfach ( ping -n 2 ::1 >nul 2>&1
) und überprüfen Sie noch einmal, ob Sie eine neue Prozess erzeugen können.
Ich habe einen kleinen Test zusammengeschustert Stapel für diese Aufgabe zusammengestellt:
@echo off
for /l %%i in (1,1,20) do call :loop %%i
goto :eof
:loop
call :checkinstances
if %INSTANCES% LSS 5 (
rem just a dummy program that waits instead of doing useful stuff
rem but suffices for now
echo Starting processing instance for %1
start /min wait.exe 5 sec
goto :eof
)
rem wait a second, can be adjusted with -w (-n 2 because the first ping
kehrt sofort zurück; rem ansonsten einfach eine unbenutzte Adresse verwenden und -n 1) echo Warten auf das Schließen von Instanzen ... ping -n 2 ::1 >nul 2>&1 rem Springe zurück, um zu sehen, ob wir jetzt einen neuen Prozess erzeugen können goto Schleife goto :eof
:checkinstances
rem this could probably be done better. But INSTANCES should contain
die Anzahl der laufenden Instanzen danach. for /f "usebackq" %%t in ( tasklist /fo csv /fi "imagename eq wait.exe"^|wc -l
) setzen INSTANZEN=%%t goto :eof
Er erzeugt maximal vier neue Prozesse, die parallel ausgeführt und minimiert. Die Wartezeit muss angepasst werden, je nachdem, wie viel viel jeder Prozess macht und wie lange er ausgeführt wird. Wahrscheinlich müssen Sie auch den Prozessnamen anpassen, nach dem Taskliste sucht, wenn Sie gerade etwas anderes tun.
Es gibt keine Möglichkeit, die Zahl der Prozesse, die von diesem Stapel erzeugt werden Stapel erzeugt werden. Eine Möglichkeit wäre, eine eine Zufallszahl zu Beginn des Stapels zu erzeugen des Stapels ( %RANDOM%
) und erstellen Sie eine Helper-Batch, der die Verarbeitung vornimmt (oder das Verarbeitungsprogramm startet), aber der seinen Fenstertitel auf einen Parameter setzt:
@echo off
title %1
"%2" "%3"
Dies wäre ein einfacher Batch, der die seinen Titel auf den ersten Parameter setzt und dann den zweiten Parameter mit dem dritten als Argument ausführt. Sie können dann in der Taskliste filtern, indem Sie nur Prozesse mit dem angegebenen Fenstertitel Titel ( tasklist /fi "windowtitle eq ..."
). Dies sollte recht zuverlässig funktionieren zuverlässig und verhindert zu viele falsche positive Ergebnisse. Suchen Sie nach cmd.exe
wäre eine schlechte Idee, wenn Sie noch eine einige Instanzen laufen, da dies die Anzahl der Ihren Pool an Arbeitsprozessen einschränkt.
Sie können verwenden %NUMBER_OF_PROCESSORS%
um eine sinnvolle Vorgabe zu schaffen, wie wie viele Instanzen erzeugt werden sollen.
Sie können dies auch leicht anpassen, um Folgendes zu verwenden psexec
um die Prozesse zu starten aus der Ferne zu starten (aber das wäre nicht sehr praktikabel da Sie Administratorrechte auf dem anderen Rechner haben müssen auf dem anderen Rechner haben müssen, sowie das Kennwort im Batch angeben). Sie müssten dann allerdings die Prozessnamen für die Filterung verwenden.