Sag, wenn ich habe
- foo.exe
- bar.exe
- baz.exe
Wie führe ich sie alle asynchron aus einer Batchdatei aus, ohne darauf zu warten, dass das vorherige Programm beendet wird?
batch-file
cmd
RichN
quelle
quelle
help
sorgfältig lesen sollen . :)Wenn Sie einige der vorherigen Antworten kombinieren, können Sie es versuchen
start /b cmd /c foo.exe
.Wenn Sie als einfaches Beispiel die Versionen von Java / Groovy / Grails / Gradle ausdrucken möchten, können Sie dies in einer Batch-Datei tun:
Wenn Sie so etwas wie Process Explorer (Sysinternals) haben, werden einige untergeordnete cmd.exe-Prozesse mit jeweils einem Java-Prozess angezeigt (gemäß den obigen Befehlen). Die Ausgabe wird in beliebiger Reihenfolge auf dem Bildschirm gedruckt.
quelle
echo off
am Anfang, was beim Ausführen des Skripts verhindert, dass alle Befehle an die Konsole zurückgegeben werden. Das@
ist ähnlich, aber nur für diesen einzelnen Befehl. Also, manchmal wirst du sehen@echo off
.Mit dem Befehl start können Sie Hintergrundprozesse erzeugen, ohne neue Fenster zu starten:
start /b foo.exe
Der neue Prozess kann mit STRG-C nicht unterbrochen werden. Sie können es nur mit STRG-BREAK beenden (oder durch Schließen des Fensters oder über den Task-Manager).
quelle
BREAK
in diesen Tagen auf Tastaturen?Erstellen Sie eine Batchdatei mit den folgenden Zeilen:
Der Befehl start führt Ihren Befehl in einem neuen Fenster aus, sodass alle drei Befehle asynchron ausgeführt werden.
quelle
Verwenden Sie den Befehl START :
Wenn der Pfad zum Programm Leerzeichen enthält, müssen Sie Anführungszeichen hinzufügen. In diesem Fall müssen Sie auch einen Titel für das sich öffnende Konsolenfenster angeben
Wenn Sie Argumente angeben müssen, fügen Sie diese am Ende hinzu (außerhalb der Anführungszeichen).
Verwenden Sie die Option / b, um das Öffnen eines neuen Konsolenfensters zu vermeiden (in diesem Fall können Sie die Anwendung jedoch nicht mit STRG-C unterbrechen
quelle
Es gibt eine dritte (und möglicherweise viel einfachere) Option. Wenn Sie mehrere Instanzen eines einzelnen Programms starten möchten, kann die Verwendung eines Unix-Befehlsprozessors wie Xargs oder GNU Parallel dies zu einem recht einfachen Vorgang machen.
Es gibt einen win32 Xargs-Klon namens PPX2 , der dies ziemlich einfach macht.
Wenn Sie beispielsweise ein Verzeichnis von Videodateien transkodieren möchten, können Sie den folgenden Befehl ausführen:
Wenn Sie dies auseinander nehmen, wird
dir /b *.mpg
eine Liste von MPG-Dateien in meinem aktuellen Verzeichnis abgerufen. Der|
Operator leitet diese Liste an ppx2 weiter, das dann eine Reihe von Befehlen erstellt, die parallel ausgeführt werden sollen. 4 auf einmal, wie hier vom-P 4
Betreiber angegeben. Der-L 1
Operator weist ppx2 an, jeweils nur eine Zeile unserer Verzeichnisliste an ffmpeg zu senden.Danach schreiben Sie einfach Ihre Befehlszeile (
ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
) und werden{}
automatisch für jede Zeile Ihrer Verzeichnisliste ersetzt.Es ist nicht in jedem Fall universell anwendbar, aber viel einfacher als die oben beschriebenen Problemumgehungen für Batchdateien. Wenn Sie sich nicht mit einer Liste von Dateien befassen, können Sie natürlich auch den Inhalt einer Textdatei oder eines anderen Programms in die Eingabe von pxx2 einfügen.
quelle
Ich konnte nichts zum Laufen bringen. Am Ende habe ich nur Powershell verwendet, um Bat-Skripte zu starten. Manchmal funktioniert sogar das Starten von cmd / c nicht sicher, warum. Ich habe sogar Dinge wie start cmd / c notepad & exit ausprobiert
quelle