【问题标题】:ProcessBuilder won't properly run with unified arguments with spaces in a pathProcessBuilder 将无法使用路径中带有空格的统一参数正确运行
【发布时间】: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


【解决方案1】:

当我不得不在 Windows 中工作时,我的 CLI 是 Cygwin,部分原因是此类问题。等效的命令是:

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

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

【讨论】:

    【解决方案2】:

    我无法让 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()
    

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2017-05-07
      • 2015-07-26
      • 2017-06-18
      相关资源
      最近更新 更多