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

如何在Windows命令提示符下使用单个命令获取java版本?,java,regex,windows,command,Java,Regex,Windows,Command,我需要从下面的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\u 26 String regexMatch(String myInput, String myRegex) {

我需要从下面的
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\u 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;
}
注意:我不需要power shell或任何外部程序

更新

我提出了
java-version2>&1 | findstr/I“version”
,它给出了下面的输出

java version "1.6.0_22"
现在,即使是模式匹配的java方式(或正则表达式)也适用于我:)

您可以尝试:

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

我编写了下面的函数来获取java版本
1.6.0\u26

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=“java version\”1.6.0\u 26\”

您可以通过一行链接到的问题运行解决方案:

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 c:\>对于/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,下面的示例适用于我在WindowsXP上的操作(因此它应该也适用于Windows7)

对于/f“tokens=3”%g in('java-version 2^>^&1^|findstr/i“version”)do(@echo%~g) 这将把java版本存储到
jver
变量中,并作为整数存储 你可以用它来做比较

if %jver% LSS 16000 echo not supported version
。您可以通过删除%k、%l和%m来使用更主要的版本。此命令提示版本

对于.bat,请使用以下命令:


根据我的测试,这是从bat获取java版本的最快方法(因为它只使用内部命令,而不使用外部命令,如
FIND
FINDSTR
,并且不使用
GOTO
,这也会减慢脚本的速度)。一些JDK供应商不支持
-fullversion
开关,或者它们的实现与Oracle提供的不同(最好避免它们)

您可以从命令promt的单行中执行此操作
C:>java-version

基于@a_horse_,没有名称,但首先检测是否存在命令

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%

描述你的最终目标?也许有更好的办法。这和@Pangea的问题不一样吗:链接使用批处理文件获取javaversion,我需要一些东西,通过它我可以直接使用一行程序获取javaversion
1.6.0\u 26
,既然我无法在客户机器中部署批处理文件,为什么不在代码中调用该属性,直接使用该属性或将其写入文件中的新空行?否则,我真的看不出Java(作为一种编程语言)与此有什么关系。Bollocs,我没有注意到,早些时候你可能想删除你的答案,因为人们可能会倒下,这个答案对于a是完全有效的。我知道这问得太多了,但仍然
无法删除?请参阅我的编辑。”。然而,这假设了一定长度的响应,这可能并不总是有效的。嗯,对我来说是有效的。您是否启用了“命令扩展名”?它们是默认的,这就是启用
%v:~1,8%
syntaxI的原因。我不知道你刚才说的是什么:P你说的“命令扩展”是什么意思?我还需要处理任何出现的问题default@AbhishekSimon:查看我的编辑。第一种语法似乎只适用于Windows7
if %jver% LSS 16000 echo not supported version
@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"
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%