Windows批处理脚本开头的双引号

3
我看了已经提供的答案,但我还是卡住了。这是我目前拥有的内容:
 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帮我找到了正确的答案。

你有没有尝试过去掉空格?我的理解是批处理脚本即使加上引号,也会将空格作为自动分隔符。 - jsmith
你试了哪个?原始的还是第二个? - Anthony
1个回答

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

不,没有运气。它是一个批处理脚本,具有简单的.bat扩展名,如果这有帮助的话。 - Anthony
我创建了一个名为temp.cpp的程序,当我打印出参数时,它周围有双引号。你有Spark.exe程序的源代码吗?你能在调试器中逐步执行并验证引号是否存在吗?据我所知,这应该是有效的。 - dcp
我认为问题不在Spark上。我可以从命令行写出带参数的命令,它可以正常工作。但是当我尝试将其放入批处理脚本中时,它就无法正常工作了。问题在于双引号、环境变量和尝试使用参数启动它的组合。每次尝试后,我感到越来越无助和沮丧,但问题绝对不在Spark上。 - Anthony
看看我的最新更新。试一试并告诉我们你的进展如何。 - dcp
是的,我搞定了。我真的很生气,因为问题的一部分是我使用了 user=%USERNAME,但实际上参数是 username,这就是为什么有时用户名字段为空而服务器字段被填充的原因。哎呀!最终我使用的是:start "" "C:\Program Files (x86)\Spark\Spark.exe" "username=%USERNAME%&server=jabber.its.utexas.edu" - Anthony

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