从批处理文件中获取java版本

时间:2013-07-18 04:42:52

标签: batch-file cmd command version

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

5 个答案:

答案 0 :(得分:18)

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并且不使用{{1}这也可以减慢脚本)。有些JDK供应商不支持GOTO交换机,或者它们的实现与Oracle提供的实现不同(更好的避免它们)。

答案 1 :(得分: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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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