Get java version from batch file

我与影子孤独终老i 提交于 2019-11-27 08:57:17
for /f tokens^=2-5^ delims^=.-_^" %j in ('java -fullversion 2^>^&1') do @set "jver=%j%k%l%m"

This will store the java version into jver variable and as integer And you can use it for comparisons .E.G

if %jver% LSS 16000 echo not supported version

.You can use more major version by removing %k and %l and %m.This command prompt version.

For .bat use this:

@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"

According to my tests this is the fastest way to get the java version from bat (as it uses only internal commands and not external ones as FIND,FINDSTR and does not use GOTO which also can slow the script). Some JDK vendors does not support -fullversion switch or their implementation is not the same as this one provided by Oracle (better avoid them).

You can do this with 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

Script example:

@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

output is: java version: "1.7.0_21-b11"
awk for Windows

it will be surly idiot but why do not just print JAVA_HOME path ?

it should be java -version // if environment path is already set

or %JAVA_HOME%/bin/java -version //if path is not already set

Within a block statement, %var% would be echoed as the value of var BEFORE the block was entered.

Move the echo outside of the block or echo %%g or call echo %%javaver%% or invoke SETLOCAL enabledelayedexpansion and echo !javaver!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!