【发布时间】:2015-04-27 21:14:56
【问题描述】:
我正在尝试向 ProcessBuilder 传递几个参数,这些参数在参数 (-) 的开头需要标记。我的命令行命令看起来像这样,在 cmd 中运行时运行良好。
msdeploy.exe -verb:sync -source:contentPath='\My\Folder with Space\Path' -dest:auto
我的项目使用 groovy 脚本并实现 ProcessBuilder 来运行命令。 ProcessBuilder 将文件夹路径视为包含空格,因此,通过按预期工作,将 arg3 放在引号中。
ProcessBuilder 被传递了参数:
arg1 = msdeploy.exe
arg2 = -verb:sync
arg3 = -source:contentPath='C:\My\Folder with Space\Path'
arg4 = -dest:auto
ProcessBuilder 将命令解释并运行为:
msdeploy.exe -verb:sync "-source:contentPath='C:\My\Folder with Space\Path'" -dest:auto
返回如下错误:
Error: Unrecognized argument '"-source:contentPath=C:\Program Files\udeploy\agent"'. All arguments must begin with "-".
转义字符并不能解决这个问题,因为即使它们被转义,它仍然可以识别空格并在整个 -source 参数周围添加引号。 msdeploy 参数中的破折号 (-) 必须位于首位。
我需要知道如何在 ProcessBuilder 中使用开头带有标签的空格来运行这样的统一参数,例如“-”。
【问题讨论】:
-
您用于 ProcessBuilder 的确切 java 命令是什么?您是将值作为多个命令传递,还是作为单个字符串传递?
-
msdeploy.exe。值作为字符串列表数组传递。
-
您用于 ProcessBuilder 的确切 java 命令是什么?
-
尝试使用类似 -source:contentPath=\"C:\\My\\Folder with Space\\Path\"" 作为参数。确保您使用的是字符串数组并将每个参数到它自己的元素中
-
windows 工具可能不喜欢参数中的 /。
标签: java groovy processbuilder