如何使用 Windows cmd 上的“start”命令启动带有命令行参数的程序?

如何使用 Windows cmd 上的“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"

它似乎将开关后的第一个参数/d作为路径,即使它被引号括起来,如果下一个参数没有被引号括起来,那么这个方法就有效。被识别为命令/程序的所有内容都作为参数传递给该命令/程序。请注意,如果命令/程序的名称中有空格,例如VBox Headless.exe,这将不起作用,因为这需要引号并被识别为标题。


总体而言,第一种方法(显式标题)可能更好。这是微软的一个糟糕设计选择,他们真的应该为标题添加一个开关,而不是“第一个参数是否用引号括起来?”。

答案2

实际上,接受的答案仍然不是解决方案。关闭执行命令的 cmd 窗口将终止其中正在运行的虚拟机的 vboxheadless 进程。

使用下面的方法将使电源外壳运行一个独立的进程。

在 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

感谢作者本文

相关内容