Windows批处理脚本的起始行中的双引号

时间:2010-02-12 20:41:02

标签: windows batch-file escaping

我看过已经提供的答案,但我仍然被卡住了。这是我现在拥有的:

 start "" "C:\Program Files (x86)\Spark\Spark.exe"
 echo Spark started

这很好用。但现在我想将参数传递给客户端,客户端必须用引号括起来。我可以在命令行上执行以下操作:

 "C:\Program Files (x86)\Spark\Spark.exe" "user=%USERNAME%&server=example.org"

它启动时填写了用户和服务器字段。

但是当我尝试编辑批处理脚本以添加这些引用包装的参数时,我会遇到各种错误,具体取决于我如何尝试添加双引号以及等等。

那么如何在起始行添加引用包装参数?

更新

我不小心让它上班,但无法重现它。但它没有完全正确。用户名仍然是空白,但服务器已填写。我忘了提到我正在使用环境变量作为用户名:%USERNAME%

所以可能是我的问题是我无法转义引号并使用环境变量?

最终答案:

事实证明,问题的一部分是我使用了错误的参数,但最初我一直在使用正确的参数,所以我没有注意到。从命令行,我应该:

 "C:\Program Files (x86)\Spark\Spark.exe" "username=%USERNAME%&server=example.org"

以及批处理文件中的以下内容如下:

 start "" "C:\Program Files (x86)\Spark\Spark.exe" "username=%USERNAME%&server=example.org"
 echo Spark started

非常感谢并指出dcp让我找到了正确的答案。

1 个答案:

答案 0 :(得分:1)

你试过这个吗?

"C:\Program Files (x86)\Spark\Spark.exe" "\"user=foo&server=example.org\""

当我尝试一个简单的命令行测试和c ++程序时(我在打印argv [1]参数时可以看到引号),这很有效。

<强>更新 如果%USERNAME%中有空格,那么您需要像这样引用它(见下文)。我想你可以删除其他引号。

"C:\Program Files (x86)\Spark\Spark.exe" user="%USERNAME%"&server=example.org