2013-07-18 17 views
7

Jak uzyskać wersję java i chcesz pobrać "6" z wersji java z pliku wsadowego. Próbowałem poniżej skryptu, ale to nie zadziałało.Pobierz wersję java z pliku wsadowego

REM check java exists using JAVA_HOME system variable 

if "%JAVA_HOME%" == "" (
ECHO Installing java 
start /w jdk.exe /s 
SETX -m JAVA_HOME "C:\Program Files\Java\jdk1.6.0_31" 
ECHO java installed successfully 
) ELSE (
ECHO checking java version 
goto check_java_version 
) 

REM check java version using JAVA_HOME system variable 
:check_java_version 
set PATH=%PATH%;%JAVA_HOME%\bin 
for /f tokens^=2-5^ delims^=.-_^" %%j in ('%JAVA_HOME%/bin/java -version 2^>^&1') do set "jver=%%j%%k%%l%%m" 
echo %jver% 

JAVA_HOME ma "C: \ Program Files \ Java \ jdk1.6.0_31" wartości.

Odpowiedz

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

To będzie przechowywać wersję java do jver zmiennej i jako liczba całkowita I można go używać do porównania .EG

if %jver% LSS 16000 echo not supported version 

Ty możesz używać bardziej znaczącą wersję usuwając% k i % l i% m.Ta wersja wiersza polecenia.

Do użytku .bat to:

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

Według moich badań jest to najszybszy sposób, aby uzyskać wersji Java z kijem (bo używa tylko wewnętrznych poleceń i nie te zewnętrzne jak FIND , FINDSTR i nie używa GOTO, co również może spowolnić skrypt). Niektórzy dostawcy JDK nie obsługują przełącznika -fullversion, a ich implementacja nie jest taka sama, jak w Oracle (lepiej ich unikać).

+0

Jak wydrukować wartość skrętu. próbowałem z echo% jver%. jego nie działa –

+0

spróbuj z *** PATH% PATH%;% JAVA_HOME% \ bin \\ *** przed pętlą for – npocmaka

+0

Błąd pobierania: mówi * ścieżka nie jest poleceniem. następnie dla echo% jver% oznacza to, że echo jest wyłączone. zaktualizowałem moje pytanie powyżej. podał pełny skrypt. po prostu sprawdź to. –

0

powinno być java -version // jeśli ścieżka środowisko jest już ustawiony

lub% JAVA_HOME%/bin/java -version // Jeśli ścieżka nie jest jeszcze ustawić

0

ciągu instrukcji blokowej,% var% zostanie odtworzone jako wartość var PRZED wprowadzeniem bloku.

Przesuń echo poza blokiem lub echo %%g lub call echo %%javaver%% lub powołać SETLOCAL enabledelayedexpansion i echo !javaver!

3

Można to zrobić z awk:

 
>java -fullversion 2>&1|awk "{print $NF}" 
"1.7.0_21-b11" 

>java -fullversion 2>&1|awk -F\" "{print $(NF-1)}" 
1.7.0_21-b11 
przykład

Scenariusz:

@ECHO OFF &SETLOCAL 
FOR /f %%a IN ('java -fullversion 2^>^&1^|awk "{print $NF}"') DO SET "javaversion=%%a" 
IF DEFINED javaversion (ECHO java version: %javaversion%) ELSE ECHO java NOT found 

wyjście jest: java version: "1.7.0_21-b11"
awk for Windows

+0

jak używać t jego w moim rozkazie. czy możesz dać mi pełny scenariusz? –

+0

wstawiono @BobbyRachel skrypt. – Endoro

0

będzie niemiły idiota ale dlaczego nie po prostu wydrukować ścieżki JAVA_HOME?

Powiązane problemy