【问题标题】:Need to pass parameters with spaces to a command wrapped in batch file from java需要将带空格的参数传递给包装在java批处理文件中的命令
【发布时间】:2016-10-03 05:03:18
【问题描述】:

我需要将带有空格的参数传递给包含在批处理文件中的命令。我需要从我的 java 代码中触发相同的操作。

我试图用双引号传递参数,但它仍然采用引号内带有空格的值,因此无法执行命令。 包含在批处理文件中的命令是 - msend -n {server} -a {event} -b "mc_object_class=%par1%;mc_parameter=%par2%;support_group=%par3%"

我用来触发相同的java方法是- 处理过程 = new ProcessBuilder("C:/test.bat", "\""+object_class+"\"", "\""+mc_parameter+"\"", "\""+support_grp+"\"" ).start();

带引号和不带引号的参数在 java 中被视为相同,而在命令提示符下它可以正常使用双引号。需要知道 ProcessBuilder 方法中带空格的参数传递方式。

Runtime.getRuntime().exec() 方法也给出同样的错误。我的工作卡在这一点上。

我们将不胜感激。

【问题讨论】:

  • 打开命令提示符窗口并运行call /?。在输出帮助中,您可以阅读如何引用从批处理文件中调用批处理文件时使用的参数(参数)。 %par1%%par2%%par3% 肯定是错误的,正确的是 %~1%~2%~3

标签: batch-file whitespace


【解决方案1】:

我不知道您是否在批处理文件中更改了参数。对于这个答案,我将直接使用输入参数(%1%3),但删除您需要从 java 代码传递的双引号(%~1%~3)(因此参数被正确标记),但我们在 msend 参数中不需要。

但是问题是在命令中没有正确处理空格。 msend 文档指出,文本字段中带有空格或标点符号的参数需要在双引号参数中包含单引号。

msend -n {server} -a {event} -b "mc_object_class='%~1';mc_parameter='%~2';support_group='%~3'"
                                                 ^...^              ^...^               ^...^
                                ^............................................................^

【讨论】:

  • 非常感谢!那个单引号解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2011-10-04
  • 2018-08-11
  • 1970-01-01
  • 2013-09-09
  • 2018-06-20
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
相关资源
最近更新 更多