Wie kann ich einen Prozess mit hoher Priorität starten und gleichzeitig seine Standardausgabe (stdout) in eine Datei umleiten?
Das funktioniert nicht:
start /HIGH my_little_proggy.exe > output.txt
Die / B-Flagge ist das, wonach Sie suchen. Folgendes funktioniert (zumindest unter Windows 10):
start /HIGH /B my_little_proggy.exe > output.txt
[BEARBEITEN # 2 - Hauptkorrektur] Wie von @ TarnayKálmán (the OP) in einem Kommentar gezeigt, startet die Shell untergeordnete Prozesse nicht auf ihrer eigenen Prioritätsstufe, sondern auf der normalen Standardpriorität. Auf der API-Ebene scheint cmd aufzurufen CreateProcess ohne irgendwelche einzustellen PRIORITY_CLASS
im dwCreationFlags
(im Gegensatz zu seinem eigenen Bestehen GetPriority()
), wodurch der untergeordnete Prozess standardmäßig ausgeführt wird NORMAL_PRIORITY_CLASS
.
Infolgedessen mögen Befehle start /HIGH call my_little_proggy.exe ^> output.txt
Startet eine sekundäre cmd.exe-Shell unter hoch Priorität, die wiederum die Umleitung übernimmt und ausgeführt wird my_little_proggy.exe
- aber mit normaler Priorität ausführen. Aus diesem Grund beantwortet der folgende Beitrag die ursprüngliche Frage der Umleitung der Ausgabe nicht, wenn start /HIGH
.
Ich habe das herausgeschnitten /HIGH
Wechsle von meinem vorherigen Beitrag und lasse den Rest unten, da die Techniken funktionieren start
im Allgemeinen und jemand kann dies nützlich finden.
Die Art, wie es geschrieben steht, die >
Umleitung gilt für die start
Kommando selbst, nicht das Kommando das start
tatsächlich läuft (in Ihrem Beispiel, my_little_proggy.exe
). Dies erklärt auch warum start /B
funktioniert, da der untergeordnete Prozess dieselbe Konsole verwendet (vorausgesetzt, my_little_proggy.exe
ist auch eine Konsolen-App).
Um die Ausgabe der umzuleiten start
'ed Befehl, müssen Sie (a) den Befehl über eine sekundäre Shell ausführen (entweder cmd /c
oder einfach call
) und (b) entkommen dem >
so dass es nicht als Sonderzeichen / Umleitungszeichen von der interpretiert wird start
line, sondern bleibt erhalten und wird an die laufende Child-Shell weitergereicht my_little_proggy.exe
. Eine der folgenden Möglichkeiten sollte dies tun (beachten Sie die ^>
).
start call my_little_proggy.exe ^> output.txt
start cmd /c my_little_proggy.exe ^> output.txt
call
oder cmd /c
Anforderung im obigen Absatz. Grund ist, dass die >
Die Ausgabeumleitung wird vom Befehlszeileninterpreter und nicht vom Zielprogramm selbst ausgeführt, damit das Ziel ausgeführt werden kann my_little_proggy.exe
muss von einer Befehlsshell gestartet werden, anstatt direkt ausgeführt zu werden.
start /HIGH ping bix.hu ^> ping.txt
. Die Datei wird nicht einmal erstellt und ping.exe wird sofort beendet.start /high cmd /c ping bix.hu ^>00
funktioniert gut hier.call
odercmd /c
Anforderung.