【发布时间】:2021-05-08 18:32:58
【问题描述】:
经常讨论,但这似乎是一个奇怪的边缘案例。
在win cmd.exe中我成功运行:
"c:\Program Files\myapp.exe" -my_arg="sth. with space"
和
"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 的内容中使用空格来运行它?
【问题讨论】:
-
*.com/questions/16639285/… 它适用于
cmd,因为您将正确格式化字符串的工作传递给cmd本身。 -
它只在 arg 中不带空格的情况下工作 - 但如何让它在带空格的情况下工作?
标签: java windows command-line processbuilder