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):

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

Ich erhalte folgende Fehlermeldung:

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.

Irgendwelche Lösungen?

Antworten:


36
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 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:

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

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

Dies wird ungefähr so ​​aussehen:

"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

Vielen Dank an den Autor dieses Artikels .


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".
Bob

WOW! cdSPARTE MEINE STUNDEN!
T.Todua
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.