Как запустить программу с аргументами командной строки в cmd Windows с помощью команды «start»?

Как запустить программу с аргументами командной строки в cmd Windows с помощью команды «start»?

Мне нужно запустить программу (виртуальную машину) в фоновом режиме с помощью 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в начале виртуальная машина работает нормально, но на переднем плане.

Есть ли какие-нибудь решения?

решение1

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"

Кажется, что он берет первый аргумент после /dswitch как путь, даже если он заключен в кавычки, и если следующий аргумент не заключен в кавычки, то это работает. Все, что после того, что распознается как команда/программа, передается как параметр этой команде/программе. Обратите внимание, что это не сработает, если в имени команды/программы есть пробелы, например VBox Headless.exe, так как это потребовало бы кавычек и было бы распознано как заголовок.


В целом, первый метод (явный заголовок) вероятно лучше. Это был плохой выбор дизайна со стороны Microsoft, им действительно следовало добавить переключатель для заголовка, а не «заключен ли первый аргумент в кавычки?».

решение2

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

Использование подхода ниже сделает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

Спасибо авторуЭта статья.

Связанный контент