Comment démarrer un programme avec des arguments de ligne de commande sur la cmd de Windows avec la commande 'start'?
33
J'ai besoin de démarrer un programme (machine virtuelle) en arrière-plan avec une startcommande sur la ligne de commande Windows 7. Normalement, vous feriez ceci comme ça:
start /b cmd yourprogram
Mais je dois passer quelques arguments et quand je le fais comme ça (sans /bindicateur pour voir les informations de débogage):
Windows ne peut pas trouver '-startvm'. Assurez-vous d'avoir correctement tapé le nom, puis réessayez.
D'un autre côté, lorsque je le fais dans la fenêtre de ligne de commande actuelle sans startau début, la machine virtuelle fonctionne normalement - mais au premier plan.
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 attend un titleentre guillemets ( "). Étant donné que votre chemin d'accès au 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 /dcommutateur pour spécifier le chemin d'accès. Plus précisément:
Il semble prendre le premier argument après le /dcommutateur comme chemin d'accès, même s'il est cité, et si l'argument suivant n'est pas cité, cela fonctionne. Tout ce qui est reconnu comme la commande / le programme est passé en paramètre à cette commande / programme. Notez que cela ne fonctionnera pas si la commande / le programme contient 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 commutateur pour le titre plutôt que "le premier argument est-il placé entre guillemets?".
Merci beaucoup pour cela :) Bien que, comme je le vois start /b, ne mettez pas la machine virtuelle en arrière-plan. Je dois alors trouver autre chose.
Patryk
Si vous souhaitez simplement supprimer la sortie ( stdout), ajoutez un >nulà la fin. Utilisez >nul 2>nulà la fin pour supprimer à la fois la sortie normale et la sortie error ( stderr). La fenêtre d'invite de commande doit cependant rester ouverte.
Bob
1
@Patryk Si cela ne vous dérange pas d'utiliser PowerShell, cette commande ouvrira un processus sans fenêtre qui n'est pas connecté au processus d'apparition (powershell.exe). Par conséquent, la fenêtre PowerShell peut être fermée et VBoxHeadless continuera de fonctionner. PowerShell est livré avec Windows 7.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Bob
3
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 exécutera un processus indépendant.
En cmd, exécutez:
cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms
Dans mon commentaire sur ma propre réponse, j'ai déjà fourni une méthode alternative pour "exécuter VBox sans tête". Ma réponse elle-même porte sur la question de "passer des arguments avec start".
start /b
, ne mettez pas la machine virtuelle en arrière-plan. Je dois alors trouver autre chose.stdout
), ajoutez un>nul
à la fin. Utilisez>nul 2>nul
à la fin pour supprimer à la fois la sortie normale et la sortie error (stderr
). La fenêtre d'invite de commande doit cependant rester ouverte.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
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 exécutera un processus indépendant.
En cmd, exécutez:
Cela retournera quelque chose comme:
Maintenant, prenez l'UUID et exécutez ce qui suit (toujours en cmd):
Merci à l'auteur de cet article .
la source
start
".cd
ENREGISTRÉ MES HEURES!