ProcessBuilder 不会正确 运行 统一参数路径中有空格
ProcessBuilder won't properly run with unified arguments with spaces in a path
我正在尝试向 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 中使用空格 运行 统一参数,这些参数开头有标签,例如“-”。
当我不得不在 Windows 中工作时,我的 CLI 是 Cygwin,部分原因是像这样的问题。等效命令为:
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 传递几个参数,这些参数在参数 (-) 的开头需要标记。我的命令行命令看起来像这样,在 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 中使用空格 运行 统一参数,这些参数开头有标签,例如“-”。
当我不得不在 Windows 中工作时,我的 CLI 是 Cygwin,部分原因是像这样的问题。等效命令为:
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()