I need to fetch java version 1.6.0_26
from the below java -version
output
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
Please help me getting 1.6.0_26
Note: I don't need power shell or any external programs
UPDATE
I came up with java -version 2>&1 | findstr /i "version"
java -version 2>&1 | findstr /i "version"
which give me below output
java version "1.6.0_22"
now even a java way of pattern matching or regex will work for me :)
You can run the solution from the question Pangea linked to in a single line:
c:\>for /f "tokens=3" %g in ('java -version 2^>^&1 ^| findstr /i "version"') do @echo %g "1.6.0_24" c:\>for /f "tokens=3" %g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( @set v=%g & @echo %v:~1,8% ) 1.6.0_24
I just checked and it seems my second example only works with Windows7, the following works for me on Windows XP (so it should work on Windows7 as well)
for /f "tokens=3" %g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( @echo %~g )
你可以从命令promt C:> java -version中从单行执行
你可以试试:
java -version 2>&1 | awk '/version/ {print $3}' | egrep -o '[^\"]*'
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 .EG
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).
Based on @a_horse_with_no_name but detecting first if command exists.
where java > nul
if %ERRORLEVEL% neq 0 (
set java_v="Command not found"
) else (
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do set java_v=%%g
)
echo Java: %java_v:~1,8%
I wrote the below function to fetch java version 1.6.0_26
String regexMatch(String myInput, String myRegex)
{
String ResultString
Pattern regex
Matcher regexMatcher
regex = Pattern.compile(myRegex, Pattern.DOTALL);
regexMatcher = regex.matcher(myInput);
List<String> matchList = new ArrayList<String>();
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
for(int i=0;i<matchList.size();i++)
{
myInput=myInput.replaceAll( matchList[i], '')
}
return myInput;
}
and call
rs=regexMatch(rs,"[a-zA-Z\"]+")
where rs="java version \\"1.6.0_26\\""
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.