簡體   English   中英

如何在Windows命令提示符下使用單個命令獲取java版本?

[英]How to get java version using single command in Windows command prompt?

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

注意:我不需要電源外殼或任何外部程序

UPDATE

我想出了java -version 2>&1 | findstr /i "version" java -version 2>&1 | findstr /i "version" ,它給我低於輸出

java version "1.6.0_22"

現在即使是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上運行)

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"

這會將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提供的實現不同(更好的避免它們)。

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

我寫了下面的函數來獲取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\\""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM