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'
我知道已经有很多关于处理在 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'