0

我知道已经有几十个关于处理在 Java 中执行具有带空格路径的系统命令的问题,但是我还没有找到针对我的确切情况的解决方案。

我在java.exeWindows 10 计算机上使用 jdk-1.8.x 附带的那个。我要执行的命令如下(我最终希望ProcessBuilder在 Java 程序中使用,但我的问题并不取决于以这种方式执行的命令;如果我也直接在终端中输入它,它仍然存在) :

cmd.exe /C "G:\myself\...\My Folder\...\runtime\bin\java.exe" -jar "G:\myself\...\My Folder\...\application.jar" <app_args>

两个路径都包括My Folder, 一个名称中带有空格的目录。但是,通往java.exe工作的路径,但通往application.jar没有的路径。

我知道第一条路径有效,因为我可以运行:

cmd.exe /C "...\java.exe" -version

但是当我尝试运行第二个时,错误是:

'G:\myself\...\My' is not recognized as an internal or external command, operable program or batch file.

这里发生了什么?为什么 java 的路径有效,而 jar 的路径无效?解析jar路径是否java.exe -jar <jar_path>与终端解析java路径不同?

4

1 回答 1

2

您没有java.exe直接运行 - 您正在运行cmd.exe然后指示cmd.exestart java.exe,这就是您处理命令行参数的问题。

使用时cmd.exe /C,需要传递一个引号的字符串,所以需要通过加倍来转义双引号(令人困惑的是,在这种模式下,单个双引号字符不需要转义,只有前导和后引号- 它令人困惑和不一致(“令人困惑和不一致”几乎概括了整个 Windows 命令行系统,但这是另一回事)。

试试这个:

cmd.exe /C ""G:\myself\...\My Folder\...\runtime\bin\java.exe" -jar "G:\myself\...\My Folder\...\application.jar" "<app_args>""

对于 PowerShell

一旦你习惯了 PowerShell 就很棒(我还没有习惯它),但它与用于启动其他程序的普通 Windows 命令行令人讨厌地不同- 只需在 PowerShell 中键入可执行文件的名称就不会运行它,您需要使用 long-termStart-Process或使用点斜杠./(与 Bash 相同):

如何从 PowerShell 调用 Java 程序?

Start-Process java.exe -ArgumentList '-jar', 'G:\myself\...\My Folder\...\application.jar'
于 2020-06-11T03:41:14.560 回答