Как запустить программу с аргументами командной строки на Windows 'cmd с командой' start'?

мне нужно запустить программу (виртуальную машину) в фоновом режиме с помощью start команда в командной строке Windows ' 7. Обычно вы делаете вот так:

start /b cmd yourprogram

но мне нужно передать некоторые аргументы и когда мне так это нравится (без /b флаг для просмотра отладочной информации):

start C:UsersUSER>start "c:Program FilesOracleVirtualBoxVBoxHeadless.exe" -startvm "debian604 64"

я получаю это сообщение об ошибке:

Windows не удается найти '-startvm'. Убедитесь, что вы ввели имя
правильно, а потом попробуйте снова.

С другой стороны, когда я делаю это в текущем окне командной строки без start в начале виртуальная машина работает нормально, но на переднем плане.

какие решения?

28
задан Peter Mortensen
08.12.2022 14:00 Количество просмотров материала 3401
Распечатать страницу

2 ответа

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, они действительно должны были добавить переключатель для заголовка, а не "первый аргумент, заключенный в кавычки?".

36
отвечен Bob 2022-12-09 21:48

на самом деле принятый ответ все еще не является решением. Закрытие окна 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

Спасибо автор в этой статье.

3
отвечен Charlie Vieillard 2022-12-10 00:05

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх