2012-04-18 14:53:51 +0000 2012-04-18 14:53:51 +0000
36
36

如何在Windows的cmd上用'start'命令启动一个程序的命令行参数?

我需要在后台用start命令启动一个程序(虚拟机),在Windows的7号命令行上用/b命令启动一个程序(虚拟机)。通常情况下,你可以这样做:

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

但我需要传递一些参数,当我这样做的时候(没有start标志来查看调试信息):

&001

我得到这样的错误信息:

Windows无法找到’-startvm'。

另一方面,当我在当前命令行窗口中执行时,如果没有&007标志,虚拟机正常运行–但在前台。

答案 (2)

40
40
40
2012-04-18 15:39:49 +0000
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"

&001

它似乎把/d开关后的第一个参数作为路径,即使它被引用了,如果下一个参数没有被引用,那么这个方法也可以。识别为命令/程序之后的所有内容都会作为参数传递给该命令/程序。请注意,如果命令/程序的名称中有空格,例如VBox Headless.exe,这将不起作用,因为这将需要加引号,并被识别为标题。这是微软的一个糟糕的设计选择,他们真的应该为标题添加一个开关,而不是 “第一个参数是用引号括起来的吗?"。

3
3
3
2013-10-23 11:32:21 +0000

实际上,公认的答案仍然不是一个解决方案。

使用下面的方法可以让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

感谢本文作者