如何在Windows中使用“start”命令和带有空格的路径和命令创建批处理文件

79

我需要创建一个批处理文件,在Windows .cmd文件中启动多个控制台应用程序。这可以使用start命令完成。

但是,该命令中有一个路径。我还需要传递带有空格的参数。如何做到这一点?

例如,批处理文件:

start "c:\path with spaces\app.exe" param1 "param with spaces"
7个回答

168

实际上,他的例子是行不通的(尽管一开始我也认为会)。根据Start命令的帮助文档,第一个参数是新创建的命令提示符窗口的名称,第二个和第三个应该分别是应用程序的路径和其参数。如果在应用程序路径前再添加一个 "",它就应该能够工作(至少对我来说是这样的)。使用类似于以下内容:

start "" "c:\path with spaces\app.exe" param1 "param with spaces"

您可以更改第一个参数为您想要的新命令提示符的标题。如果创建的是 Windows 应用程序,则不会显示命令提示符,标题也无关紧要。


似乎窗口标题是必需的,尽管互联网上有很多文档声称相反。请忽略那些文档,遵循安迪的建议。 - Corin
如果我从交互式界面输入Windows应用程序命令,则该应用程序在后台启动,我会看到一个新提示符。如果我从批处理脚本运行相同的命令,则应用程序将在前台启动;我的批处理脚本会停止,直到我退出应用程序。哎呀!我尝试了很长时间使用start在后台运行我的应用程序,但是start /B "app"不起作用,而start cmd /C "app"会给我一个多余的控制台。谢谢!我终于学会了我需要一个窗口标题来进行非窗口启动。这个可以:start /B "" "app" - Keith Robertson
谢谢!即使指定了/wait参数,情况仍然是实际的!当使用start "" /wait "%CDir%\cron.exe" -q -remove时可以工作,但start /wait "%CDir%\cron.exe" -q -remove无法工作。 - Fr0sT

16

用撇号转义路径是正确的,但是启动命令需要一个包含新窗口标题的参数。此参数由周围的撇号检测到,因此您的应用程序未被执行。

尝试类似这样的内容:

start "Dummy Title" "c:\path with spaces\app.exe" param1 "param with spaces"

2
start "" "c:\path with spaces\app.exe" "C:\path parameter\param.exe"

当我尝试使用上面的建议时,遇到了以下问题:

'c:\path' 不是内部或外部命令,也不是可运行的程序或批处理文件。

我认为第二个引号阻止了命令的执行。经过一些搜索,下面的解决方案解决了我的问题:
start "" CALL "c:\path with spaces\app.exe" "C:\path parameter\param.exe"

创建一个空文件test 2.bat,然后使用以下命令创建一个名为test1.bat的文件:START "Test title" "test 2.bat" %* - 现在运行test1.bat "param 1",但它无法正常工作,为什么? - ale5000

1
有趣的是,在Windows Embedded Compact 7中,似乎无法指定标题字符串。第一个参数必须是命令或程序。

0

你需要使用类似以下的命令:

start /d C:\Windows\System32\calc.exe

start /d "C:\Program Files\Mozilla

Firefox" firefox.exe start /d

"C:\Program Files\Microsoft

Office\Office12" EXCEL.EXE

我还建议你使用特殊的批处理文件编辑器 - Dr.Batcher


-1

我已经成功地进行了研究,并且它对我来说运作良好。我的要求是使用VBScript发送电子邮件,需要从Windows中的批处理文件中调用。这里是我正在使用的精确命令,没有错误。

START C:\Windows\System32\cscript.exe "C:\Documents and Settings\akapoor\Desktop\Mail.vbs"

这是错误的。你可以写成 START "" "C:\Documents and Settings\akapoor\Desktop\Mail.vbs"。你的代码之所以能够工作,是因为vbs是一个扩展名,在“启动”时会被解析。尝试使用路径调用notepad.exe,它不会起作用。它将始终执行脚本。 - Samuel

-1

在引号内将路径和参数用空格括起来,就像您的示例一样。当参数传递给命令时,该命令可能需要处理引号,但通常不是什么大问题。


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