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

Hoe start ik een programma met commandoregel argumenten op Windows' cmd met 'start' commando?

Ik moet een programma (virtuele machine) op de achtergrond starten met een start commando op Windows’ 7 commandoregel. Normaal gesproken zou je dit zo doen:

start /b cmd yourprogram

Maar ik moet wat argumenten doorgeven en als ik het zo wil (zonder /b vlag om de debug informatie te zien):

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

krijg ik deze foutmelding:

Windows kan ‘-startvm’ niet vinden. Zorg ervoor dat je de naam correct hebt getypt, en probeer het dan opnieuw.

Aan de andere kant als ik het in het huidige commandoregel venster doe zonder de start in het begin draait de virtuele machine normaal - maar dan op de voorgrond.

Enige oplossingen?

Antwoorden (2)

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

Als u de parameterlijst met start /? leest:

Verwacht een title tussen aanhalingstekens ("). Aangezien uw programmapad aanhalingstekens bevatte, werd het geïnterpreteerd als de titel. Het toevoegen van een expliciete titel (in dit geval, leeg, "") werkt.

  • *

Een alternatieve methode is het gebruik van de /d-schakelaar om het pad te specificeren. Specifiek:

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.

Het lijkt erop dat het eerste argument na de /d-schakelaar als pad wordt gebruikt, zelfs als het wordt geciteerd, en als het volgende argument niet wordt geciteerd dan werkt dit. Alles na wat herkend wordt als het commando/programma wordt als parameter aan dat commando/programma doorgegeven. Merk op dat dit niet werkt als het commando/programma spaties in de naam heeft, b.v. VBox Headless.exe, aangezien dat aanhalingstekens zou vereisen en als titel zou worden herkend.

  • *

In het algemeen is de eerste (expliciete titel) methode waarschijnlijk beter. Het was een slechte ontwerpkeuze van Microsoft, ze hadden echt een schakelaar voor de titel moeten toevoegen in plaats van “is het eerste argument tussen aanhalingstekens?”.

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

Eigenlijk is het geaccepteerde antwoord nog steeds geen oplossing. Het sluiten van het cmd-venster waarin het commando werd uitgevoerd, zal het vboxheadless-proces met de draaiende virtuele machine in de vbox doden.

Met de onderstaande aanpak zal PowerShell een onafhankelijk proces uitvoeren.

In cmd, run:

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

Dit levert iets op als:

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

Neem nu de UUID en run het volgende (nog steeds in cmd):

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

Met dank aan de auteur van dit artikel .