经常讨论,但这似乎是一个奇怪的边缘情况。
在 windows cmd.exe 中我成功运行:
"c:\Program Files\myapp.exe" -my_arg="sth. with space"
and
"c:\Program Files\myapp.exe" -my_arg="sth_without_space"
在 java ProcessBuilder.command(xxx) 中,以下失败并显示“c:\Program”不是有效命令(xxx 包含以下数组):
// using cmd.exe:
["cmd.exe", "/c", "c:\Program Files\myapp.exe", "-my_arg=sth. with space"] // no extra quoting
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\"", "-my_arg=sth. with space"] // exe quoted
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\"", "-my_arg=\"sth. with space\""] // exe & arg quoted
["cmd.exe", "/c", "c:\Program Files\myapp.exe", "-my_arg=\"sth. with space\""] // arg quoted
// putting all as cmd.exe arg:
["cmd.exe", "/c", "c:\Program Files\myapp.exe -my_arg=sth. with space"] // no extra quoting
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\" -my_arg=sth. with space"] // exe quoted
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\" -my_arg=\"sth. with space\""] // exe & arg quoted
["cmd.exe", "/c", "c:\Program Files\myapp.exe -my_arg=\"sth. with space\""] // arg quoted
// calling *.exe directly
["c:\Program Files\myapp.exe", "-my_arg=sth. with space"] // no extra quoting
["\"c:\Program Files\myapp.exe\"", "-my_arg=sth. with space"] // exe quoted
["\"c:\Program Files\myapp.exe\"", "-my_arg=\"sth. with space\""] // exe & arg quoted
["c:\Program Files\myapp.exe", "-my_arg=\"sth. with space\""] // arg quoted
运行这个工作正常:
["cmd.exe", "/c", "c:\Program Files\myapp.exe", "-my_arg=sth_without_space"]
当 *.exe 路径和 arg 包含空格时,问题似乎就开始了。
[编辑]:
我的问题是:如何在 exe 路径和 arg 内容中使用空格来运行它?