如何在Windows命令提示符下使用单一命令获取java版本?

我需要从下面的java -version输出中获取java版本1.6.0_26

 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) 

请帮助我获得1.6.0_26

注:我不需要电源shell或任何外部程序

UPDATE

我想出了java -version 2>&1 | findstr /i "version" java -version 2>&1 | findstr /i "version"这给我下面的输出

 java version "1.6.0_22" 

现在甚至一个模式匹配正则expression式的java方式将为我工作:)

Solutions Collecting From Web of "如何在Windows命令提示符下使用单一命令获取java版本?"

您可以从单一行中链接的Pangea问题运行解决方案:

    
 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

我刚刚检查,似乎我的第二个例子只适用于Windows7,下面的作品在我的Windows XP(所以它也应该在Windows7上工作)

 ('java -version 2 ^> ^&1 ^ | findstr / i“version”')do(@echo%〜g)中的/ f“tokens = 3”%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" 

这将把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" 

根据我的测试,这是从蝙蝠获得Java版本的最快方式(因为它只使用内部命令,而不是外部的FINDFINDSTR ,而不使用GOTO ,这也会减慢脚本)。 一些JDK供应商不支持-fullversion开关,或者它们的实现与Oracle提供的不一样(更好地避免它们)。

我写了下面的函数来获取Java版本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; } 

并打电话

 rs=regexMatch(rs,"[a-zA-Z\"]+") 

其中rs="java version \"1.6.0_26\""

基于@a_horse_with_no_name,但首先检测是否存在命令。

 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%