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

时间:2011-09-30 06:17:17

标签: java regex windows command

我需要从下面的1.6.0_26输出

中获取java版java -version
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

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

更新

我提出了java -version 2>&1 | findstr /i "version",它给了我以下输出

java version "1.6.0_22"

现在即使是模式匹配正则表达式的java方式也适用于我:)

6 个答案:

答案 0 :(得分:4)

您可以在一行中运行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)

for /f "tokens=3" %g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( @echo %~g )

答案 1 :(得分:3)

您可以从命令提示符的单行执行此操作 C:> java -version

答案 2 :(得分:2)

您可以尝试:

java -version 2>&1 | awk '/version/ {print $3}' | egrep -o '[^\"]*'

答案 3 :(得分:1)

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提供的实现不同(更好的避免它们)。

答案 4 :(得分:0)

我编写了以下函数来获取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\""

答案 5 :(得分:0)

基于@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%