【问题标题】:Batch script to check the Java home and compare java version用于检查 Java 主页并比较 Java 版本的批处理脚本
【发布时间】:2014-09-05 07:03:58
【问题描述】:

您好,我需要一个批处理脚本来检查系统中是否有 java home 和脚本来比较 java 版本

我的要求是

1.) 脚本需要检查系统中是否设置了 java home。我认​​为“echo %JAVA_HOME%”会这样做。但是如果 Java Home 不可用,它需要显示一条消息显示“Java home is not可用。请在计算机>属性>变量路径中设置java主页。

2.) 需要检查系统中的java版本,如果java版本高于1.6_445则需要显示“Java版本高于MR工具将无法安装。(我认为对于这个,它需要创建一个数组并存储 Java 版本的值,并且需要比较这些值。但我不知道如何为它编写代码)由于 Java 版本包含下划线,所以我认为比较将是一项艰巨的任务.

目前我正在使用下面的脚本,但它根本不能满足我的要求。谁能帮我制作一个满足上述要求的脚本。提前致谢

回声 setlocal enableextensions disableddelayedexpansion

:: possible locations under HKLM\SOFTWARE of JavaSoft registry data
set "javaNativeVersion="
set "java32ON64=Wow6432Node\"

:: for variables
::    %%k = HKLM\SOFTWARE subkeys where to search for JavaSoft key
::    %%j = full path of "Java Runtime Environment" key under %%k
::    %%v = current java version
::    %%e = path to java

set "javaDir="
set "javaVersion="
for %%k in ( "%javaNativeVersion%" "%java32ON64%") do if not defined javaDir (
    for %%j in (
        "HKLM\SOFTWARE\%%~kJavaSoft\Java Runtime Environment"
    ) do for /f "tokens=3" %%v in (
        'reg query "%%~j" /v "CurrentVersion" 2^>nul ^| find /i "CurrentVersion"'
    ) do for /f "tokens=2,*" %%d in (
        'reg query "%%~j\%%v" /v "JavaHome"   2^>nul ^| find /i "JavaHome"'
    ) do ( set "javaDir=%%~e" & set "javaVersion=%%v" )
)

if not defined javaDir (
    echo Java not found
) else (
    echo JAVA_HOME="%javaDir%"
    echo JAVA_VERSION="%javaVersion%"
)

endlocal
pause

【问题讨论】:

    标签: java windows batch-file batch-processing java-home


    【解决方案1】:
     @echo off
    :: possible locations under HKLM\SOFTWARE of JavaSoft registry data
    set "javaNativeVersion="
    set "java32ON64=Wow6432Node\"
    
    :: for variables
    ::    %%k = HKLM\SOFTWARE subkeys where to search for JavaSoft key
    ::    %%j = full path of "Java Runtime Environment" key under %%k
    ::    %%v = current java version
    ::    %%e = path to java
    
    set "javaDir="
    set "javaVersion="
    for %%k in ( "%javaNativeVersion%" "%java32ON64%") do if not defined javaDir (
        for %%j in ("HKLM\SOFTWARE\%%~kJavaSoft\Java Runtime Environment"
        ) do for /f "tokens=3" %%v in (
            'reg query "%%~j" /v "CurrentVersion" 2^>nul ^| find /i "CurrentVersion"'
        ) do for /f "tokens=2,*" %%d in (
            'reg query "%%~j\%%v" /v "JavaHome"   2^>nul ^| find /i "JavaHome"'
        ) do ( set "javaDir=%%~e" & set "javaVersion=%%v" )
    )
    
    if not defined javaDir (
        echo Java not found
        exit /b 1
    ) else (
        echo JAVA_HOME=%javaDir%
        set JAVA_HOME=%javaDir%
        PATH %JAVA_HOME%\bin;%PATH%
        java.exe >nul 2>&1 || (
            setx JAVA_HOME %JAVA_HOME%
            setx PATH %PATH%
        )
        echo  JAVA_VERSION=%javaVersion%
    )
    
    for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do @set "jver=%%j%%k%%l%%m"
    echo full java version %jver%
    if %jver% GTR  16445 (
        echo "Java version is higher MR tool will not able to install"
        exit /b 2
    )
    

    【讨论】:

    • @user3400717 你有SETX 作为你系统上的命令吗? (只需在命令提示符下键入 setx)
    • @user3400717 你的 PATH 变量是什么样子的?
    • "c:\Program Files\java\jre7"(java安装的路径)。 @npocmaka
    • @user3400717 - 真的很抱歉/:-| .我的第一个脚本损坏了您的路径变量 - 它不允许在其中使用引号。您能否通过环境变量修复它并将其设置为 `C:\Windows\system32\;C:\Windows`(如果您的 Windows 安装在 C 下:)
    • 嗨 npocmaka,这里给出了引号是为了清楚起见,脚本中不需要 qoutes。我已经替换了它,但脚本仍然无法工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2014-12-18
    相关资源
    最近更新 更多