Як запустити програму з аргументів командного рядка в Windows 'cmd за допомогою команди' start '?


33

Мені потрібно запустити програму (віртуальну машину) у фоновому режимі startкомандою у командному рядку Windows 7. Зазвичай ви зробите це так:

start /b cmd yourprogram

Але мені потрібно передати деякі аргументи, і коли мені так подобається (без /bпрапора, щоб побачити інформацію про налагодження):

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

Я отримую це повідомлення про помилку:

Windows не може знайти "-startvm". Переконайтесь, що ви правильно ввели ім’я та повторіть спробу.

З іншого боку, коли я це роблю у поточному вікні командного рядка без startпочатку, віртуальна машина працює нормально - але на передньому плані.

Будь-які рішення?

Відповіді:


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

Якщо ви читаєте список параметрів за допомогою 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.

Він очікує, що titleдодається до лапок ( "). Оскільки ваш програмний шлях включав лапки, його інтерпретували як заголовок. Додавання явного заголовка (у цьому випадку порожнього "") працює.


Альтернативним методом є використання /dперемикача для визначення шляху. Конкретно:

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

Здається, перший аргумент після /dперемикання бере як шлях, навіть якщо він цитується, а якщо наступний аргумент не цитується, то це працює. Все після того, що визнається командою / програмою, передається як параметр цій команді / програмі. Зверніть увагу, це не буде працювати, якщо команда / програма має пробіли в імені, наприклад VBox Headless.exe, оскільки це вимагатиме лапок і буде розпізнано як заголовок.


Загалом, перший (явний заголовок) метод, мабуть, кращий. Це був поганий вибір дизайну з боку Microsoft, вони дійсно повинні були додати перемикач для заголовка, а не "це перший аргумент, що додається до лапок?".


Дякую за це :) Хоча, як я бачу, start /bя не ставте віртуальну машину на задній план. Я повинен тоді придумати щось інше.
Патрик

Якщо ви просто хочете придушити вихід ( stdout), додайте >nulдо кінця. Використовуйте >nul 2>nulв кінці, щоб придушити як нормальний вихід, так і помилку ( stderr). Однак вікно командного рядка має залишатися відкритим.
Боб

1
@Patryk Якщо ви не заперечуєте проти використання PowerShell, ця команда відкриє процес без вікон, який не підключений до процесу нересту (powershell.exe). Тому вікно PowerShell можна закрити, і VBoxHeadless буде продовжувати працювати. PowerShell поставляється з Windows 7.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Боб

3

Насправді прийнята відповідь все ще не є рішенням. Закриття вікна cmd, в якому виконувалася команда, знищить процес без vboxhead із запущеною в ньому віртуальною машиною.

Використання наведеного нижче підходу дозволить PowerShell запустити незалежний процес.

У cmd запустіть:

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

Це поверне щось на кшталт:

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

Тепер візьміть UUID і запустіть наступне (все ще в cmd):

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

Дякую автору цієї статті .


У своєму коментарі до власної відповіді я вже запропонував альтернативний метод "без роботи VBox без голови". Сама моя відповідь стосується питання "передачі аргументів start".
Боб

ОЦЕ ТАК! cdЗбережені мої години!
Т.Тодуа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.