[英]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版本的最快方法(因為它只使用內部命令而不使用外部命令作為FIND
, FINDSTR
並且不使用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.