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

Come avviare un programma con argomenti da riga di comando su Windows' cmd con il comando 'start'?

Ho bisogno di avviare un programma (macchina virtuale) in background con un comando start sulla riga di comando di Windows’ 7. Normalmente si fa così:

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

Ma devo passare alcuni argomenti e quando mi piace così (senza flag /b per vedere le informazioni di debug):

&001

ottengo questo messaggio di errore:

Windows non riesce a trovare ‘-startvm’. Assicuratevi di aver digitato il nome correttamente e poi riprovate.

D'altra parte quando lo faccio nella finestra della riga di comando corrente senza il flag start all'inizio la macchina virtuale funziona normalmente - ma in primo piano.

Qualche soluzione?

Risposte (2)

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

Se si legge la lista dei parametri con 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.
``` ```
start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"

Si aspetta un title racchiuso tra virgolette ("). Poiché il percorso del programma includeva le virgolette, è stato interpretato come il titolo. L'aggiunta di un titolo esplicito (in questo caso, vuoto, "") funziona.


Un metodo alternativo è l'uso dell'interruttore /d per specificare il percorso. In particolare:

&001 &001

Sembra prendere come percorso il primo argomento dopo l'interruttore /d, anche se è citato, e se l'argomento successivo non è citato, allora questo funziona. Tutto dopo quello che viene riconosciuto come comando/programma viene passato come parametro a quel comando/programma. Si noti che questo non funzionerà se il comando/programma ha degli spazi nel nome, ad esempio VBox Headless.exe, poiché ciò richiederebbe delle virgolette e verrebbe riconosciuto come titolo.


Nel complesso, il primo metodo (titolo esplicito) è probabilmente migliore. È stata una pessima scelta progettuale da parte di Microsoft, avrebbero davvero dovuto aggiungere uno switch per il titolo piuttosto che “il primo argomento è racchiuso tra virgolette?

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

In realtà la risposta accettata non è ancora una soluzione. Chiudendo la finestra cmd in cui il comando è stato eseguito, il processo vboxheadless con la macchina virtuale in esecuzione verrà interrotto.

Usando l'approccio sottostante, PowerShell eseguirà un processo indipendente.

In cmd, eseguire:

cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms
``` ```
"Webserver LAP" {8748b594-7e2d-4d8d-8785-999940766754}

Questo restituirà qualcosa come:

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


Ora prendere l'UUID ed eseguire il seguente (ancora in cmd): 


&001 


Grazie all'autore di [ questo articolo ](http://www.thatsgeeky.com/2012/03/windowless-virtualbox-vms-windows-host/#comment-2134).