我需要将带空格的参数传递给包含在批处理文件中的命令。我需要从java中的代码中触发相同的内容。
我试图用双引号传递参数,但它仍然使用带空格的引号内的值,因此无法执行命令。 包含在批处理文件中的命令是 - msend -n {server} -a {event} -b" mc_object_class =%par1%; mc_parameter =%par2%; support_group =%par3%"
我用来触发相同的java方法是 - 处理流程=新的ProcessBuilder(" C:/test.bat"," \"" + object_class +" \"&# 34;," \"" + mc_parameter +" \""," \"" + support_grp +& #34; \""。)开始();
带引号和不带引号的参数在java中被视为相同,而在命令提示符下,它可以使用双引号。需要知道从ProcessBuilder方法传递带空格的参数的方法。
Runtime.getRuntime()。exec()方法也给出了同样的错误。我的工作在这一点上停滞不前。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
我不知道您的批处理文件中是否正在更改参数。对于这个答案,我将直接使用输入参数(%1
到%3
),但删除需要从java传递的双引号(%~1
到%~3
)代码(所以参数被正确地标记化),但我们在msend
参数中不需要。
但问题是在命令中没有正确处理空格。 msend
文档声明文本字段中带空格或标点符号的参数在双引号参数中需要单引号。
msend -n {server} -a {event} -b "mc_object_class='%~1';mc_parameter='%~2';support_group='%~3'"
^...^ ^...^ ^...^
^............................................................^