【问题标题】:Get java version from batch file从批处理文件中获取 java 版本
【发布时间】:2013-07-16 21:14:41
【问题描述】:

如何获取 java 版本并希望从批处理文件中获取 java 版本中的“6”。 我尝试了下面的脚本,但没有成功。

    REM check java exists using JAVA_HOME system variable

if "%JAVA_HOME%" == "" (
ECHO Installing java
start /w jdk.exe /s
SETX -m JAVA_HOME "C:\Program Files\Java\jdk1.6.0_31"
ECHO java installed successfully
) ELSE (
ECHO checking java version
goto check_java_version
)

REM check java version using JAVA_HOME system variable
:check_java_version
set PATH=%PATH%;%JAVA_HOME%\bin
for /f tokens^=2-5^ delims^=.-_^" %%j in ('%JAVA_HOME%/bin/java -version 2^>^&1') do set "jver=%%j%%k%%l%%m"
echo %jver%

JAVA_HOME 具有“C:\Program Files\Java\jdk1.6.0_31”值。

【问题讨论】:

    标签: batch-file cmd command version


    【解决方案1】:
    for /f tokens^=2-5^ delims^=.-_^" %j in ('java -fullversion 2^>^&1') do @set "jver=%j%k%l%m"
    

    这会将 java 版本存储到 jver 变量中并作为整数 你可以用它来比较.E.G

    if %jver% LSS 16000 echo not supported version
    

    。您可以通过删除 %k 和 %l 和 %m 来使用更多主要版本。此命令提示符版本。

    对于 .bat 使用这个:

    @echo off
    PATH %PATH%;%JAVA_HOME%\bin\
    for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
    

    根据我的测试,这是从 bat 获取 java 版本的最快方法(因为它仅使用内部命令,而不使用外部命令,如 FINDFINDSTR 并且不使用 GOTO,这也会减慢脚本)。一些JDK厂商不支持-fullversion开关或者他们的实现与Oracle提供的这个不一样(最好避免它们)。

    【讨论】:

    • 如何打印 jver 值。我尝试使用 echo %jver%。它不工作
    • 在 for 循环之前尝试 *PATH %PATH%;%JAVA_HOME%\bin\*
    • 出现错误:它说 *path 不是命令。然后对于 echo %jver% 它说 echo 已关闭。我在上面更新了我的问题。给出了完整的脚本。请检查一下。
    • 删除*。粗体在这里留下一个星号...将编辑答案
    • java.exe 不在路径中。如果你只写 %JAVA_HOME%\bin\java.exe / 会有什么结果?
    【解决方案2】:

    您可以使用awk

    >java -fullversion 2>&1|awk "{print $NF}" “1.7.0_21-b11” >java -fullversion 2>&1|awk -F\" "{print $(NF-1)}" 1.7.0_21-b11

    脚本示例:

    @ECHO OFF &SETLOCAL
    FOR /f %%a IN ('java -fullversion 2^>^&1^|awk "{print $NF}"') DO SET "javaversion=%%a"
    IF DEFINED javaversion (ECHO java version: %javaversion%) ELSE ECHO java NOT found
    

    输出为:java version: "1.7.0_21-b11"
    awk for Windows

    【讨论】:

    • @BobbyRachel 脚本已插入。
    【解决方案3】:

    这将是一个笨拙的白痴,但为什么不只打印 JAVA_HOME 路径?

    【讨论】:

      【解决方案4】:

      它应该是 java -version // 如果环境路径已经设置

      or %JAVA_HOME%/bin/java -version //如果路径还没有设置

      【讨论】:

        【解决方案5】:

        在块语句中,%var% 将在输入块之前作为var 的值回显。

        echo移出块或回显%%gcall echo %%javaver%%或调用SETLOCAL enabledelayedexpansionecho !javaver!

        【讨论】:

          猜你喜欢
          • 2011-08-06
          • 2012-10-24
          • 1970-01-01
          • 2015-08-29
          • 2018-11-12
          • 1970-01-01
          • 2021-09-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多