¿Cómo iniciar un programa con argumentos de línea de comando en el cmd de Windows con el comando 'iniciar'?

¿Cómo iniciar un programa con argumentos de línea de comando en el cmd de Windows con el comando 'iniciar'?

Necesito iniciar un programa (máquina virtual) en segundo plano con un startcomando en la línea de comandos de Windows 7. Normalmente harías esto así:

start /b cmd yourprogram

Pero necesito pasar algunos argumentos y cuando lo hago me gusta esto (sin /bbandera para ver la información de depuración):

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

Recibo este mensaje de error:

Windows no puede encontrar '-startvm'. Asegúrese de haber escrito el nombre correctamente y vuelva a intentarlo.

Por otro lado, cuando lo hago en la ventana de línea de comando actual sin al startprincipio, la máquina virtual se ejecuta normalmente, pero en primer plano.

¿Alguna solución?

Respuesta1

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

Si lees la lista de parámetros 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.

Espera un titlemensaje entre comillas ( "). Dado que la ruta de su programa incluía comillas, se interpretó como el título. Agregar un título explícito (en este caso, vacío "") funciona.


Un método alternativo es utilizar el /dinterruptor para especificar la ruta. Específicamente:

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

Parece tomar el primer argumento después del /dcambio como ruta, incluso si está entre comillas, y si el siguiente argumento no está entre comillas, entonces esto funciona. Todo lo que sigue a lo que se reconoce como comando/programa se pasa como parámetro a ese comando/programa. Tenga en cuenta que esto no funcionará si el comando/programa tiene espacios en el nombre, por ejemplo VBox Headless.exe, ya que requeriría comillas y sería reconocido como un título.


En general, el primer método (título explícito) probablemente sea mejor. Fue una mala elección de diseño por parte de Microsoft, realmente deberían haber agregado un cambio para el título en lugar de "¿el primer argumento está entre comillas?".

Respuesta2

En realidad, la respuesta aceptada todavía no es una solución. Cerrar la ventana cmd donde se ejecutó el comando finalizará el proceso vboxheadless con la máquina virtual en ejecución.

Usar el siguiente enfoque hará quePotencia Shellejecutar un proceso independiente.

En cmd ejecutamos:

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

Esto devolverá algo como:

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

Ahora toma el UUID y ejecuta lo siguiente (aún en cmd):

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

Gracias al autor deEste artículo.

información relacionada