Java ProcessBuilder赢得';t使用路径中带有空格的统一参数正常运行

Java ProcessBuilder赢得';t使用路径中带有空格的统一参数正常运行,java,groovy,processbuilder,Java,Groovy,Processbuilder,我试图传递ProcessBuilder的几个参数,这些参数需要在参数(-)的开头添加标记。我的命令行命令看起来像这样,在cmd中运行时运行良好 msdeploy.exe -verb:sync -source:contentPath='\My\Folder with Space\Path' -dest:auto 我的项目使用groovy脚本并实现ProcessBuilder来运行该命令。ProcessBuilder将文件夹路径视为具有空格,因此,通过按预期工作,可以将arg3放在引号中 Proc

我试图传递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中使用开头有标记的空格(例如“-”)运行像这样的统一参数

我的CLI是我不得不在Windows中工作的时候,部分原因是这样的问题。等效命令为:

msdeploy.exe -verb:sync -source:contentPath="/cygdrive/c/My/Folder\ with\ Space/Path"

文件分隔符是正斜杠,空格必须用反斜杠转义。完成猜测。

我无法让ProcessBuilder使用此命令。但是,通过手动构建命令字符串并将其直接传递给Runtime().exec,我确实得到了预期的结果,如图所示:

def command = "msdeploy.exe -verb:sync -source:contentPath='\My\Folder with Space\Path' -dest:auto"
def proc = Runtime.getRuntime().exec(command)
proc.waitForProcessOutput(System.out, System.err)
if (proc.exitValue()) {
    throw new Exception("Command failed with exit code: " + proc.exitValue())
}
return proc.exitValue()

ProcessBuilder使用的确切java命令是什么?您是将值作为多个命令传递,还是作为单个字符串传递?msdeploy.exe。正在以字符串列表数组的形式传递值。ProcessBuilder使用的确切java命令是什么?请尝试使用-source:contentPath=\“C:\\My\\Folder with Space\\Path\”“作为参数。请确保您使用的是字符串数组,并将每个参数分隔为其自己的元素windows工具可能不喜欢参数中的/。