Windows java.exe -jar带空格

问题描述 投票:0回答:1

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

我正在使用 java.exe jdk-1.8.x在Windows 10电脑上自带的命令。我要执行的命令如下(我想使用的是 ProcessBuilder 但我的问题并不取决于命令是否以这种方式执行;如果我直接在终端中键入它,它也会持续存在)。)

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的路径却不行?是否 java.exe -jar <jar_path> 解析jar路径和终端解析java路径的方式不同?

windows java-8 filepath java-process-runtime
1个回答
2
投票

你不是在运行 java.exe 直接 - 你正在运行 cmd.exe 然后指示 cmd.exe 启动 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中简单地输入可执行文件的名称将无法运行它,你需要使用长期的 Start-Process 或使用点划线 ./ 和Bash一样)。

如何从PowerShell调用Java程序?

Start-Process java.exe -ArgumentList '-jar', 'G:\myself\...\My Folder\...\application.jar'
© www.soinside.com 2019 - 2024. All rights reserved.