使用“start”命令并传递参数给启动的程序

260

我在Virtual PC 2007中有一个虚拟机。

为了从桌面启动它,我在批处理文件中使用以下命令:

"c:\program files\Microsoft Virtual PC\Virtual PC.exe" -pc "MY-PC" -launch

但这会在虚拟机关闭之前使主机机器上留下一个DOS提示符,直到我退出Virtual PC控制台。这很烦人。

所以我改用了START命令:

start "c:\program files\Microsoft Virtual PC\Virtual PC.exe" -pc MY-PC -launch

但它在传递给Virtual PC的参数上出现了问题。

START /?表明参数确实位于该位置。是否有人使用START启动具有多个命令行参数的程序?

12个回答

545

START有一个与双引号相关的特殊性质,围绕第一个参数。如果第一个参数带有双引号,则将其用作新窗口的可选标题。

我认为你想要的是:

start "" "c:\program files\Microsoft Virtual PC\Virtual PC.exe" -pc MY-PC -launch

换句话说,在程序名之前给它一个空标题来欺骗它。


3
这个是否已被弃用?在Win 7中我得到了Start-Process: Cannot validate argument on parameter 'FilePath'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again - geotheory
1
谁能想象,仅仅因为你的回答获得了许多赞同,这就足以成为微软修复这个“奇怪问题”的理由。 - Piyush Soni
9
我了解这是一条旧评论,但在PowerShell中,“start”是“Start-Process”的别名。在cmd.exe中(有点过时,但并未废弃),"start"则不同。它们都用于启动其他进程,但在cmd中,“start”是一个旧的嵌入式命令。 - Adam Plocher
你是否知道在任务管理器中启动URL时打开一个新标签页的参数(而不更改当前页面)? - JinSnow

17

您可以在桌面上创建一个快捷方式,而不是批处理文件。

将目标设置为:

"c:\program files\Microsoft Virtual PC\Virtual PC.exe" -pc "MY-PC" -launch

一切都搞定了。由于您不需要启动命令提示符来启动它,因此不会出现DOS窗口。


7

您可以使用引号通过 [/D"路径"] 使用 /D 只用于 指定路径而非路径+程序。似乎在同一行上的所有代码都回到了正常状态,这意味着您不需要分离路径和文件。

    start  /D "C:\Program Files\Internet Explorer\" IEXPLORE.EXE

或者:

    start  /D "TITLE" "C:\Program Files\Internet Explorer\" IEXPLORE.EXE

将以默认网页启动IE。

    start  /D "TITLE" "C:\Program Files\Internet Explorer\" IEXPLORE.EXE www.bing.com

以Bing开头,但不会重置您的主页。

/D代表“目录”,使用引号是可以的!

错误示例:

    start  /D "TITLE" "C:\Program Files\Internet Explorer\IEXPLORE.EXE"

给出的提示:

错误 "当前目录无效。"

/D 后面必须跟着一个目录路径,然后是一个空格和你希望启动/运行的批处理文件或程序。

在XP下测试并且可行,但是在Windows Vista/7/8下可能需要一些调整来适应UAC。

-Mrbios


4

这些答案对我都没用。

相反,我不得不使用“Call”命令:

Call "\\Path To Program\Program.exe" <parameters>

我不确定这实际上是否等待完成......我安装的C++ Redistributable足够快,以至于这并不重要


3

空格是DOS/CMD问题,因此您应该通过以下路径进行操作:

cd "c:\program files\Microsoft Virtual PC"

然后只需通过以下方式启动VPC:

start Virtual~1.exe -pc MY-PC -launch

~1 意味着以 "Virtual" 开头的第一个 exe 文件。所以如果有一个名为 "Virtual PC.exe" 和一个名为 "Virtual PC1.exe" 的文件,第一个文件将被命名为 Virtual~1.exe,第二个将被命名为 Virtual~2.exe,以此类推。

或者使用 VNC 客户端,如 VirtualBox。


3
这看起来是一个合理的解决方法,但它并没有真正解决潜在的问题,而这个问题已经被接受的答案所覆盖。 - Sam
1
如果未启用短文件名,则此方法将无法正常工作。我总是在我的系统中禁用8.3文件名。 - phuclv

1
如果您想传递参数并且您的.exe文件在C:驱动器的test文件夹中: start "parameter" "C:\test\test1.exe" -pc My Name-PC -launch 如果您不想传递参数并且您的.exe文件在C:驱动器的test文件夹中: start "" "C:\test\test1.exe" -pc My Name-PC -launch 如果您不想传递参数并且您的.exe文件在H:(任何其他)驱动器的test文件夹中: start "" "H:\test\test1.exe" -pc My Name-PC -launch

0

如果您必须在任何参数中使用双引号,您可能会遇到错误“'c:\somepath' 不是内部或外部命令,也不是可运行的程序或批处理文件”。我建议在使用双引号时采用以下解决方案:https://dev59.com/43VD5IYBdhLWcg3wJIAK#43467194


0

"peculiarity" 中的答案是正确的,直接回答了问题。正如 TimF 所回答的那样,由于第一个参数在引号中,因此它被视为窗口标题。

还要注意,Virtual PC 选项被视为“start”命令本身的选项,而不是“start”的有效选项。这对于所有具有“start”命令的 Windows 版本都是正确的。

“start”将带引号的参数视为标题的问题甚至比发布的问题更令人恼火。如果您运行以下内容:

start "some valid command with spaces"

你会得到一个新的命令提示符窗口,窗口标题显而易见。 更加烦人的是,这个新窗口不会继承自定义字体、颜色或窗口大小,它只是cmd.exe的默认设置。


-1

/b 参数

start /b "" "c:\program files\Microsoft Virtual PC\Virtual PC.exe" -pc "MY-PC" -launch

1
这个参数是做什么用的? - Azeezah M
3
@AzeezahM /b 的意思是不会打开一个新的命令行窗口。然而,这并没有回答提问者的问题。 - aclave1

-4

你尝试过了吗:

start "c:\program files\Microsoft Virtual PC\Virtual PC.exe" "-pc MY-PC -launch"

?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接