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

发布于 2024-12-07 08:28:42 字数 542 浏览 1 评论 0原文

我需要从下面的 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

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

更新

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

java version "1.6.0_22"

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

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" 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 :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

情何以堪。 2024-12-14 08:28:42

您可以从单行链接到的问题 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 )

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 )
简单 2024-12-14 08:28:42

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

you can do it from single line from command promt
C:>java -version

金橙橙 2024-12-14 08:28:42

您可以尝试:

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

You can try:

java -version 2>&1 | awk '/version/ {print $3}' | egrep -o '[^\"]*'
猥︴琐丶欲为 2024-12-14 08:28:42
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"

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

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).

尴尬癌患者 2024-12-14 08:28:42

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

where rs="java version \"1.6.0_26\""

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

天涯离梦残月幽梦 2024-12-14 08:28:42

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

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%
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文