2

我的问题与以下 SO 问题极为相似:如何从批处理脚本中获取 Java 版本?

事实上,它几乎解决了我的问题。唯一的区别是我必须根据 %JAVA_HOME% 检查 Java 版本,用户可以自由修改。我面临的问题是这段代码:

@ECHO OFF
SETLOCAL enableextensions enabledelayedexpansion

IF "%JAVA_HOME%"=="" (
    @ECHO Please set JAVA_HOME environment variable
    EXIT /B
) 

@echo "%JAVA_HOME%"

REM Checking JAVA_VERSION
SET JAVA_VERSION=
FOR /f "tokens=3" %%g in ('"%JAVA_HOME%"\bin\java -version 2^>^&1 ^| findstr /i "version"') do (
        SET "JAVA_VERSION=%%g"
)

我系统中的 %JAVA_HOME%% 指向“C:\Program Files\jdk1.7.0_25”(注意路径中的空格

即使有引号,我也会在命令行中收到以下错误:

'C:\Program' 不是内部或外部命令、可运行程序或批处理文件。

关于如何解决这个问题的任何想法?(对上述文章的评论也提到了这个问题)。我正在使用 Windows 7 机器

4

3 回答 3

3
FOR /f "tokens=3" %%g in ('"%JAVA_HOME%\bin\java" -version 2^>^&1 ^| findstr /i "version"') 做 (
        SET "JAVA_VERSION=%%g"
)
于 2013-08-09T18:01:38.720 回答
1

将 %JAVA_HOME% 变量编辑为:

C:\"Program Files"\jdk1.7.0_25

如果你想让它自动化,输入

set %JAVA_HOME%=C:\"Program Files"\jdk1.7.0_25

原因: 批处理文件不接受引号;它将它们标识为单个文件。因此,它尝试查找“C:\Program Files\jdk1.7.0_25”不是作为文件夹路径,而是作为根文件夹中的文件夹名称。如果您输入 C:\"Program Files"\jdk1.7.0.25,它会识别出“Program Files”是单个文件。如果没有重定向操作符,它会认为路径是这样的;C:\Program\Files\jdk1.7.0_25。它对我有用;它应该对你有用。

希望有帮助

-SonorousTwo

于 2013-08-10T13:09:09.100 回答
0

我有一个类似的问题,看看我的 QA:How to get Java version in a batch script subroutine?

从我的回答:

似乎出于某种原因,将输出传送到 findstr 正在剥离引号。

在没有 Epic_Tonic 的解决方法的情况下,我设法解决了这个问题(将路径作为参数很难做到)。


这应该适用于您的情况:

set first=1
for /f "tokens=3" %%g in ('"%JAVA_HOME%\bin\java" -version 2^>^&1') do (
    if !first!==1 echo %%~g
    set first=0
)

注意:first仅用于搜索java -version输出的第一行(参考)。

于 2018-06-01T21:56:17.880 回答