Wie starte ich ein Programm mit Befehlszeilenargumenten unter Windows 'cmd mit dem Befehl' start '?
33
Ich muss ein Programm (virtuelle Maschine) im Hintergrund mit einem startBefehl in der Windows 7-Befehlszeile starten . Normalerweise würde man das so machen:
start /b cmd yourprogram
Aber ich muss ein paar Argumente übergeben und wenn es mir so gefällt (ohne /bFlag, um die Debug-Informationen zu sehen):
Windows kann '-startvm' nicht finden. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und versuchen Sie es erneut.
Auf der anderen Seite, wenn ich es im aktuellen Kommandozeilenfenster mache, ohne dass startdie virtuelle Maschine am Anfang normal läuft - aber im Vordergrund.
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[command/program] [parameters]
"title" Title to display in window title bar.
command/program
If it is an internal cmd command or a batch file then
the command processor is run with the /K switch to cmd.exe.
This means that the window will remain after the command
has been run.
If it is not an internal cmd command or batch file then
it is a program and will run as either a windowed application
or a console application.
parameters These are the parameters passed to the command/program.
Es erwartet ein titlein Anführungszeichen eingeschlossenes ( "). Da Ihr Programmpfad Anführungszeichen enthielt, wurde er als Titel interpretiert. Das Hinzufügen eines expliziten Titels (in diesem Fall leer "") funktioniert.
Eine alternative Methode verwendet den /dSchalter, um den Pfad anzugeben. Speziell:
Es scheint das erste Argument nach dem zu nehmen /d Switch als Pfad verwendet, auch wenn es in Anführungszeichen gesetzt ist. Wenn das nächste Argument nicht in Anführungszeichen gesetzt ist, funktioniert dies. Alles nach dem, was als Befehl / Programm erkannt wird, wird als Parameter an diesen Befehl / dieses Programm übergeben. Beachten Sie, dass dies nicht funktioniert, wenn der Befehl / das Programm Leerzeichen im Namen enthält VBox Headless.exe, da dies Anführungszeichen erfordert und als Titel erkannt wird.
Insgesamt ist die erste (explizite Titel-) Methode wahrscheinlich besser. Es war eine schlechte Design-Wahl von Seiten von Microsoft, sie hätten wirklich einen Schalter für den Titel hinzufügen sollen, anstatt "ist das erste Argument in Anführungszeichen eingeschlossen?".
Vielen Dank dafür :) Obwohl, wie ich weiß start /b, die virtuelle Maschine nicht in den Hintergrund stellen. Ich muss mir dann etwas anderes einfallen lassen.
Patryk
Wenn Sie nur die Ausgabe unterdrücken möchten ( stdout), fügen Sie >nulam Ende ein hinzu. Verwenden Sie >nul 2>nulam Ende, um sowohl die normale Ausgabe als auch die Ausgabe von error ( stderr) zu unterdrücken . Das Eingabeaufforderungsfenster muss jedoch geöffnet bleiben.
Bob
1
@Patryk Wenn Sie nichts dagegen haben, PowerShell zu verwenden, wird mit diesem Befehl ein fensterloser Prozess geöffnet, der nicht mit dem Spawning-Prozess (powershell.exe) verbunden ist. Daher kann das PowerShell-Fenster geschlossen werden und VBoxHeadless läuft weiter. PowerShell kommt mit Windows 7.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Bob
3
Eigentlich ist die akzeptierte Antwort noch keine Lösung. Wenn Sie das Cmd-Fenster schließen, in dem der Befehl ausgeführt wurde, wird der vboxheadless-Prozess mit der aktiven virtuellen Maschine abgebrochen.
Wenn Sie den folgenden Ansatz verwenden, wird PowerShell als unabhängiger Prozess ausgeführt.
Führen Sie in cmd Folgendes aus:
cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms
In meinem Kommentar zu meiner eigenen Antwort habe ich bereits eine alternative Methode zum "kopflosen Ausführen von VBox" angegeben. Meine Antwort selbst befasst sich mit der Frage "Argumente weitergeben mit start".
start /b
, die virtuelle Maschine nicht in den Hintergrund stellen. Ich muss mir dann etwas anderes einfallen lassen.stdout
), fügen Sie>nul
am Ende ein hinzu. Verwenden Sie>nul 2>nul
am Ende, um sowohl die normale Ausgabe als auch die Ausgabe von error (stderr
) zu unterdrücken . Das Eingabeaufforderungsfenster muss jedoch geöffnet bleiben.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Eigentlich ist die akzeptierte Antwort noch keine Lösung. Wenn Sie das Cmd-Fenster schließen, in dem der Befehl ausgeführt wurde, wird der vboxheadless-Prozess mit der aktiven virtuellen Maschine abgebrochen.
Wenn Sie den folgenden Ansatz verwenden, wird PowerShell als unabhängiger Prozess ausgeführt.
Führen Sie in cmd Folgendes aus:
Dies wird ungefähr so aussehen:
Nehmen Sie nun die UUID und führen Sie Folgendes aus (immer noch in cmd):
Vielen Dank an den Autor dieses Artikels .
quelle
start
".cd
SPARTE MEINE STUNDEN!