2012-04-18 14:53:51 +0000 2012-04-18 14:53:51 +0000
36
36

Wie starte ich ein Programm mit Befehlszeilenargumenten unter Windows' cmd mit dem Befehl 'start'?

Ich muss ein Programm (virtuelle Maschine) im Hintergrund mit dem Befehl start auf der Befehlszeile von Windows’ 7 starten. Normalerweise würden Sie das so machen:

start /b cmd yourprogram

Aber ich muss einige Argumente übergeben, und wenn ich es so mache (ohne /b-Flag, um die Debug-Informationen zu sehen):

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

erhalte ich diese Fehlermeldung:

Windows kann ‘-startvm’ nicht finden. Vergewissern Sie sich, dass Sie den Namen richtig eingegeben haben, und versuchen Sie es dann erneut.

Andererseits, wenn ich es im aktuellen Befehlszeilenfenster ohne das Flag start am Anfang mache, läuft die virtuelle Maschine normal - aber im Vordergrund.

Irgendwelche Lösungen?

Antworten (2)

40
40
40
2012-04-18 15:39:49 +0000
start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"

Wenn Sie die Parameterliste mit start /? lesen:

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 eine in Anführungszeichen eingeschlossene title erwartet ("). 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 ist die Verwendung des Schalters /d zur Angabe des Pfades. Konkret:

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

Es scheint, dass das erste Argument nach der Befehlszeilenoption /d als Pfad verwendet wird, auch wenn es zitiert wird, und wenn das nächste Argument nicht zitiert wird, funktioniert dies. Alles nach dem, was als Befehl/Programm erkannt wird, wird als Parameter an diesen Befehl/Programm übergeben. Beachten Sie, dass dies nicht funktioniert, wenn der Befehl/das Programm Leerzeichen im Namen enthält, z.B. VBox Headless.exe, da dies Anführungszeichen erfordern und als Titel erkannt werden würde.


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

3
3
3
2013-10-23 11:32:21 +0000

Eigentlich ist die akzeptierte Antwort immer noch keine Lösung. Durch Schließen des cmd-Fensters, in dem der Befehl ausgeführt wurde, wird der vboxheadless-Prozess mit der darin ausgeführten virtuellen Maschine beendet.

Bei Verwendung des unten beschriebenen Ansatzes wird PowerShell als unabhängiger Prozess ausgeführt.

Führen Sie in cmd aus:

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

Dies gibt etwas zurück wie:

"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 von dieser Artikel .