需要将带空格的参数传递给包装在 java 中的批处理文件中的命令
Need to pass parameters with spaces to a command wrapped in batch file from java
我需要将带空格的参数传递给包装在批处理文件中的命令。我需要从 java.
中的代码触发相同的操作
我试过用双引号传递参数,但它仍然在带空格的引号内取值,因此无法执行命令。
包裹在批处理文件中的命令是 -
msend -n {server} -a {event} -b "mc_object_class=%par1%;mc_parameter=%par2%;support_group=%par3%"
我用来触发相同的 java 方法是 -
Process process = new ProcessBuilder("C:/test.bat", "\""+object_class+"\"", "\""+mc_parameter+"\"", " \""+support_grp+"\"").start();
带引号和不带引号的参数在 java 中被视为相同,而在命令提示符下它可以很好地使用双引号。需要知道从 ProcessBuilder 方法传递带有空格的参数的方法。
Runtime.getRuntime().exec() 方法也给出同样的错误。我的工作就卡在了这里。
非常感谢任何帮助。
我不知道您是否在批处理文件中更改参数。对于这个答案,我将直接使用输入参数(%1
到 %3
),但删除需要从 java 代码(因此参数被正确标记化),但我们在 msend
参数中不需要。
但接下来的问题是命令中的空格处理不当。 msend
文档指出文本字段中带有空格或标点符号的参数需要在双引号参数中使用单引号。
msend -n {server} -a {event} -b "mc_object_class='%~1';mc_parameter='%~2';support_group='%~3'"
^...^ ^...^ ^...^
^............................................................^
我需要将带空格的参数传递给包装在批处理文件中的命令。我需要从 java.
中的代码触发相同的操作我试过用双引号传递参数,但它仍然在带空格的引号内取值,因此无法执行命令。 包裹在批处理文件中的命令是 - msend -n {server} -a {event} -b "mc_object_class=%par1%;mc_parameter=%par2%;support_group=%par3%"
我用来触发相同的 java 方法是 - Process process = new ProcessBuilder("C:/test.bat", "\""+object_class+"\"", "\""+mc_parameter+"\"", " \""+support_grp+"\"").start();
带引号和不带引号的参数在 java 中被视为相同,而在命令提示符下它可以很好地使用双引号。需要知道从 ProcessBuilder 方法传递带有空格的参数的方法。
Runtime.getRuntime().exec() 方法也给出同样的错误。我的工作就卡在了这里。
非常感谢任何帮助。
我不知道您是否在批处理文件中更改参数。对于这个答案,我将直接使用输入参数(%1
到 %3
),但删除需要从 java 代码(因此参数被正确标记化),但我们在 msend
参数中不需要。
但接下来的问题是命令中的空格处理不当。 msend
文档指出文本字段中带有空格或标点符号的参数需要在双引号参数中使用单引号。
msend -n {server} -a {event} -b "mc_object_class='%~1';mc_parameter='%~2';support_group='%~3'"
^...^ ^...^ ^...^
^............................................................^