2011-09-30 50 views
3

我需要從以下java -version輸出如何在Windows命令提示符下使用單個命令獲取java版本?

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版本1.6.0_26:我不需要電源外殼或任何外部的程序

UPDATE

我想出了java -version 2>&1 | findstr /i "version"這給我輸出下面的

java version "1.6.0_22" 

現在連模式匹配正則表達式的一個Java方法會爲我工作:)

+0

說明你的最終目標是什麼?也許有更好的辦法。而不是以此爲http://stackoverflow.com/questions/5675459/how-to-get-java-version-from-batch-script –

+0

@Pangea同樣的問題:鏈接使用批處理文件獲取javaversion,我因爲我無法在客戶機器上部署我的批處理文件,所以需要直接使用一行代碼來獲得javaversion'1.6.0_26'的東西 – abi1964

+0

爲什麼不直接調用[java.version](http://pscode.org/prop /?prop=java.specification.version%2Cjava.version%2Cjava.vm.specification.version&format=TSV)代碼中的屬性,並直接使用它或將它寫入文件中的新空白行?否則,我真的無法看到Java(作爲編程語言)與此有什麼關係。 –

回答

4

您可以從盤古鏈接到一個單一的線的問題的解決方案:

  
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) 
+0

我知道它過分的要求,但仍'「'不能被刪除 – abi1964

+0

見我的編輯但是這是假定響應的一定長度可能不總是有效的 –

+0

哎呀它給我'%V:。〜1, 8%' – abi1964

2

你可以試試:

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

我想你給了我一個Windows命令提示符命令:P – abi1964

+0

Bollocs,有沒有注意到早先 – Kris

+0

你可能想要刪除你的答案,因爲人們可向下投票 – abi1964

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

1
for /f tokens^=2-5^ delims^=.-_^" %j in ('java -fullversion 2^>^&1') do @set "jver=%j%k%l%m" 

這將Java版本存儲到jver變量和整數 你可以通過刪除%K和%用它來比較.EG

if %jver% LSS 16000 echo not supported version 

。你可以使用更多的主要版本l和%m。此命令提示版本。

對於蝙蝠使用本:

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

根據我的測試,這是擺脫蝙蝠的Java版本(因爲它僅使用內部命令,而不是外部因素爲FIND的最快方法,FINDSTR並且不使用GOTO,這也會減慢腳本的運行速度)。一些JDK供應商不支持-fullversion交換機,或者它們的實現與Oracle提供的不一樣(更好地避免它們)。

3

可以從單個線從命令做PROMT C:> Java的版本

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% 
相關問題