44 votes

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 dans la ligne de commande de Windows 7. Normalement, vous le feriez comme ça :

start /b cmd votreprogramme

Mais j'ai besoin de passer des arguments et quand je le fais comme ceci (sans le drapeau /b 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 peut pas trouver '-startvm'. Assurez-vous d'avoir tapé le nom correctement, puis réessayez.

En revanche, 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 à l'avant-plan.

Des solutions ?

47voto

Bob Points 58080
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 ] [/AFFINITY ] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Titre à afficher dans la barre de titre de la fenêtre.
    command/program
                S'il s'agit d'une commande cmd interne ou d'un fichier batch alors
                le processeur de commande est exécuté avec l'interrupteur /K vers cmd.exe.
                Cela signifie que la fenêtre restera ouverte après que la commande
                ait été exécutée.

                S'il ne s'agit pas d'une commande cmd interne ou d'un fichier batch alors
                c'est un programme et s'exécutera soit en tant qu'application fenêtrée
                soit en tant qu'application console.

    paramètres  Ce sont les paramètres transmis à la commande/au programme.

Il s'attend à un titre encadré de guillemets ("). Comme votre chemin du programme incluait des guillemets, il a été interprété comme le titre. Ajouter un titre explicite (dans ce cas, vide, "") fonctionne.


Une méthode alternative est d'utiliser l'interrupteur /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 l'interrupteur /d comme le chemin, même s'il est entre guillemets, et si le prochain argument n'est pas entre guillemets alors cela fonctionne. Tout ce qui suit ce qui est reconnu comme la commande/le programme est passé en tant que paramètre à cette commande/à ce programme. Notez que cela ne fonctionnera pas si la commande/le programme comporte des espaces dans le nom, par ex. VBox Headless.exe, car cela nécessiterait des guillemets et serait reconnu comme un titre.


En général, 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?".

4voto

Charlie Vieillard Points 141

En fait, la réponse acceptée n'est toujours pas une solution. Fermer la fenêtre cmd où la commande a été exécutée tuera le processus vboxheadless avec la machine virtuelle en cours d'exécution à l'intérieur.

En utilisant l'approche ci-dessous, PowerShell exécutera un processus indépendant.

Dans cmd, exécutez :

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

Cela renverra 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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X