Wie starte ich ein Programm mit Befehlszeilenargumenten in der Windows-Eingabeaufforderung mit dem Befehl „Start“?

Wie starte ich ein Programm mit Befehlszeilenargumenten in der Windows-Eingabeaufforderung mit dem Befehl „Start“?

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 einige Argumente übergeben und zwar so (ohne /bFlag zum Anzeigen der Debuginformationen):

start C:\Users\USER>start "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"

Ich erhalte diese Fehlermeldung:

Windows kann „-startvm“ nicht finden. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und versuchen Sie es dann erneut.

Wenn ich es hingegen im aktuellen Befehlszeilenfenster ohne das startam Anfang mache, läuft die virtuelle Maschine normal – aber im Vordergrund.

Irgendwelche Lösungen?

Antwort1

start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"

Wenn Sie die Parameterliste lesen mit start /?:

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 wird ein titlein Anführungszeichen eingeschlossenes ( ") erwartet. Da Ihr Programmpfad Anführungszeichen enthielt, wurde es als Titel interpretiert. Das Hinzufügen eines expliziten Titels (in diesem Fall leer, "") funktioniert.


Eine alternative Methode besteht darin, /dden Pfad mit dem Schalter anzugeben. Genauer gesagt:

start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"

Es scheint, dass das erste Argument nach dem /dSchalter als Pfad verwendet wird, auch wenn es in Anführungszeichen steht. Wenn das nächste Argument nicht in Anführungszeichen steht, 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 hat, z. B. VBox Headless.exe, da dies Anführungszeichen erfordern und als Titel erkannt werden würde.


Insgesamt ist die erste Methode (expliziter Titel) wahrscheinlich besser. Es war eine schlechte Designentscheidung von Microsoft, sie hätten wirklich einen Schalter für den Titel hinzufügen sollen, anstatt „ist das erste Argument in Anführungszeichen eingeschlossen?“.

Antwort2

Tatsächlich ist die akzeptierte Antwort immer noch keine Lösung. Das Schließen des Cmd-Fensters, in dem der Befehl ausgeführt wurde, beendet den vboxheadless-Prozess mit der darin laufenden virtuellen Maschine.

Mit dem folgenden Ansatz können SiePower Shelleinen unabhängigen Prozess ausführen.

Führen Sie in cmd Folgendes aus:

cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms

Das Ergebnis ist etwa:

"Webserver LAP" {8748b594-7e2d-4d8d-8785-999940766754}

Nehmen Sie nun die UUID und führen Sie Folgendes aus (immer noch in cmd):

powershell start-process 'C:\program files\oracle\virtualbox\vboxheadless' '-s 8748b594-7e2d-4d8d-8785-999940766754' -WindowStyle Hidden

Dank an den Autor vonDieser Artikel.

verwandte Informationen