11

如何获取 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”值。

4

5 回答 5

20
for /f tokens^=2-5^ delims^=.-_^" %j in ('java -fullversion 2^>^&1') do @set "jver=%j%k%l%m"

这会将java版本存储到jver变量中并作为整数您可以将其用于比较.EG

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 版本的最快方法(因为它只使用内部命令而不是外部命令 as FINDFINDSTR并且不使用GOTO也会减慢脚本的速度)。一些JDK供应商不支持-fullversionswitch或者他们的实现与Oracle提供的这个不同(最好避免它们)。

于 2013-07-18T04:45:33.223 回答
3

你可以这样做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

于 2013-07-18T06:31:15.440 回答
1

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

于 2016-08-18T09:13:34.310 回答
0

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

或 %JAVA_HOME%/bin/java -version //如果路径尚未设置

于 2013-07-18T04:46:35.010 回答
0

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

移动echo块外部或回显%%gcall echo %%javaver%%或调用SETLOCAL enabledelayedexpansionecho !javaver!

于 2013-07-18T04:47:00.827 回答