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

Posted

技术标签:

【中文标题】使用“start”命令并将参数传递给已启动的程序【英文标题】:Using the "start" command with parameters passed to the started program 【发布时间】:2010-09-14 07:43:10 【问题描述】:

我在 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 启动具有多个命令行参数的程序?

【问题讨论】:

【参考方案1】:

/b参数

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

【讨论】:

这个参数有什么作用? @AzeezahM /b 表示不会打开新的 cmd 窗口。但这并不能回答 op 的问题。【参考方案2】:

这些答案都不适合我。

相反,我不得不使用调用命令:

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

我不确定这是否真的在等待完成...我正在安装的 C++ Redistributable 运行速度足够快,这并不重要

【讨论】:

【参考方案3】:

您可以通过使用引号 [/D"Path"] 使用 /D only 指定路径而不是路径+程序。看来,随后同一行上的所有代码都恢复正常,这意味着您不需要分隔路径和文件。

    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】:

如果你必须在任何参数中使用双引号,你会得到错误“'c:\somepath' is not Recognized a internal or external command, operable program or batch file”。 使用双引号时,我建议使用以下解决方案: https://***.com/a/43467194/3835640

【讨论】:

【参考方案5】:

START 有一个特殊之处,即在第一个参数周围使用双引号。如果第一个参数有双引号,它会将其用作新窗口的可选 TITLE。

我相信你想要的是:

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

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

【讨论】:

这是否已弃用?在 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 谁能想到。仅是对您的答案的支持数量就足以让 Microsoft 解决此“特殊性”。 @geotheory 我意识到这是一个旧评论,但在 PowerShell 中,start 是 Start-Process 的别名。在 cmd.exe (有点过时,但未弃用)中,“开始”是不同的。它们都用于启动其他进程,但 start 是 cmd 中的旧嵌入式命令。 碰巧(关于从任务管理器启动URL)你知道打开浏览器时(不改变当前页面)静默打开新标签页的参数吗?【参考方案6】:

如果你想在c:盘的test文件夹中传递参数和你的.exe文件

start "parameter" "C:\test\test1.exe" -pc My Name-PC -launch

如果您不想在 c: 驱动器的测试文件夹中传递参数和 .exe 文件

start "" "C:\test\test1.exe" -pc My Name-PC -launch

如果您不想在 H: (Any Other)drive 的测试文件夹中传递参数和 .exe 文件

start "" "H:\test\test1.exe" -pc My Name-PC -launch

【讨论】:

【参考方案7】:

“特殊性”中的答案是正确的,直接回答了问题。正如 TimF 所回答的,由于第一个参数用引号引起来,因此它被视为窗口标题。

另请注意,Virtual PC 选项被视为“启动”命令本身的选项,对“启动”无​​效。这适用于所有具有“启动”命令的 Windows 版本。

'start' 将引用的参数视为标题的问题比仅发布的问题更令人讨厌。如果你运行这个:

start "some valid command with spaces"

你会得到一个新的命令提示符窗口,窗口标题的结果很明显。 更烦人的是,这个新窗口并没有继承自定义的字体、颜色或窗口大小,它只是 cmd.exe 的默认设置。

【讨论】:

【参考方案8】:

将“Virtual PC.exe”更改为文件夹中没有空格的名称,如“VirtualPC.exe”。 当您使用“”编写start "path" 时,CMD 会启动一个新的 cmd 窗口,其中路径为标题。 把名字改成不带空格的名字,写在记事本上,然后像Name.cmd或Name.bat一样保存:

CD\
CD Program Files
CD Microsoft Virtual PC
start VirtualPC.exe
timeout 2
exit

此命令会将CMD重定向到文件夹,启动VirualPC.exe,等待2秒然后退出。

【讨论】:

如果软件更新了会怎样?突然间,你得到了一个孤立的 virtualpc.exe。【参考方案9】:

空格是 DOS/CMDs 问题,所以您应该通过以下方式转到路径:

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

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

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

~1 表示第一个exe"Virtual" 开头。因此,如果有 "Virtual PC.exe""Virtual PC1.exe",第一个是 Virtual~1.exe,第二个是 Virtual~2.exe,依此类推。

或者使用像 VirtualBox 这样的 VNC-Client。

【讨论】:

这看起来是一个合理的解决方法,但它并没有真正解决被接受的答案所涵盖的根本问题。 如果没有启用短文件名,这将不起作用。我总是在我的系统中禁用 8.3 文件名【参考方案10】:

将命令放入批处理文件中,并使用参数调用它。

另外,你试过了吗? (移动结束引号来封装参数)

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

【讨论】:

【参考方案11】:

你试过了吗:

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

?

【讨论】:

【参考方案12】:

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

将目标设置为:

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

一切就绪。由于您没有启动命令提示符来启动它,因此不会有 DOS 框。

【讨论】:

以上是关于使用“start”命令并将参数传递给已启动的程序的主要内容,如果未能解决你的问题,请参考以下文章

Process.Start - 将 html 代码作为参数传递给 exe

如何在 Linux 中使用终端命令将文件参数传递给我的 bash 脚本? [复制]

将命令行参数传递给 AWS Fargate 容器

如何将命令行参数传递给构建的 Mix Release

如何将命令行参数传递给 Node.js 程序?

如何将命令行参数传递给 Node.js 程序?