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

Comment démarrer un programme avec des arguments en ligne de commande sur le cmd de Windows avec la commande "start" ?

Je dois démarrer un programme (machine virtuelle) en arrière-plan avec une commande start sur la ligne de commande de Windows 7. Normalement, vous devriez faire comme ceci :

start /b cmd yourprogram

Mais je dois passer quelques arguments et quand je le fais comme ceci (sans /b flag pour voir les informations de débogage) :

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

je reçois ce message d'erreur :

Windows ne trouve pas ‘-startvm’. Vérifiez que vous avez tapé le nom correctement, puis réessayez.

D'autre part, lorsque je le fais dans la fenêtre de ligne de commande actuelle sans le start au début, la machine virtuelle fonctionne normalement - mais au premier plan.

Des solutions ?

Réponses (2)

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

Si vous lisez la liste des paramètres avec 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.

Il s'attend à un title entre guillemets ("). Comme le chemin de votre programme comprenait des guillemets, il a été interprété comme le titre. L'ajout d'un titre explicite (dans ce cas, vide, "") fonctionne.


Une autre méthode consiste à utiliser le commutateur /d pour spécifier le chemin. Plus précisément :

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

Il semble prendre le premier argument après le commutateur /d comme chemin, même s'il est cité, et si l'argument suivant n'est pas cité, alors cela fonctionne. Tout ce qui suit ce qui est reconnu comme commande/programme est passé comme paramètre à cette commande/programme. Notez que cela ne fonctionnera pas si la commande/le programme comporte des espaces dans le nom, par exemple VBox Headless.exe, car cela nécessiterait des guillemets et serait reconnu comme un titre.


Dans l'ensemble, la première méthode (titre explicite) est probablement meilleure. C'était un mauvais choix de conception de la part de Microsoft, ils auraient vraiment dû ajouter un interrupteur pour le titre plutôt que “le premier argument est-il entre guillemets ?

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

En fait, la réponse acceptée n'est toujours pas une solution. La fermeture de la fenêtre cmd dans laquelle la commande a été exécutée tuera le processus vboxheadless avec la machine virtuelle en cours d'exécution.

En utilisant l'approche ci-dessous, PowerShell lancera un processus indépendant. Dans cmd, exécutez :

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

Cela donnera quelque chose comme :

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

Maintenant, prenez l'UUID et exécutez ce qui suit (toujours dans cmd) :

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

Merci à l'auteur de cet article .