Windows java.exe -jar 带空格

Windows java.exe -jar with spaces

我知道已经有很多关于处理在 Java 中具有 spaces 路径的执行系统命令的问题,但我还没有找到适合我的确切情况的解决方案还没有。

我在 Windows 10 计算机上使用 jdk-1.8.x 附带的 java.exe。我要执行的命令如下(我最终想在 Java 程序中使用 ProcessBuilder,但我的问题并不取决于以这种方式执行的命令;如果我也可以直接将其输入终端):

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

两个路径都包含 My Folder,一个名称中带有 space 的目录。但是,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 的路径无效? java.exe -jar <jar_path> 解析 jar 路径是否与终端解析 java 路径不同?

你不是直接 运行ning java.exe - 你是 运行ning cmd.exe 然后指示 cmd.exe 开始 java.exe,这就是您处理命令行参数的问题。

当使用 cmd.exe /C 时,你需要给它传递一个 长引号字符串,所以你需要通过加倍来转义双引号(令人困惑的是,在这种模式下,单个双引号字符不需要转义,只需要前引号和后引号 - 它令人困惑和不一致("it's confusing and inconsistent" 几乎总结了整个 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 中键入可执行文件的名称将不会 运行 它,您需要使用长期 Start-Process 或使用点斜线 ./ (等同于 Bash):

来自

Start-Process java.exe -ArgumentList '-jar', 'G:\myself\...\My Folder\...\application.jar'