2009-03-12 10 views

Odpowiedz

9

Ten fragment wyszuka bieżącą ścieżkę dla java.exe i wydrukować gdzie stwierdzono:

for /f %%j in ("java.exe") do @echo.%%~dp$PATH:j 

W moim systemie to daje mi

C: \ WINDOWS \ system32 \

Stosując tę ​​można ustawić JAVA_HOME następująco:

@echo off 

for /f %%j in ("java.exe") do (
    set JAVA_HOME=%%~dp$PATH:j 
) 

if %JAVA_HOME%.==. (
    @echo java.exe not found 
) else (
    @echo JAVA_HOME = %JAVA_HOME% 
) 
+0

system32 nie jest tam, gdzie JRE zostanie zainstalowany. Zobacz http://mindprod.com/jgloss/registry.html#JAVAFIND JAVA_HOME jest zazwyczaj używany w skryptach w tym formularzu do uruchamiania aplikacji:% JAVA_HOME% \ bin \ java – McDowell

+0

Nie mówię, że tak, ale to tam się dzieje przebywać na mojej ścieżce. Z innej odpowiedzi (lub komentarzy do innej odpowiedzi, nie wiem, została usunięta) możesz * może * mieć instalator, który kopiuje plik java.exe do katalogu% systemroot% \ system32. W moim systemie najwyraźniej tak. –

+0

Moje rozwiązanie znajdzie miejsce, w którym java.exe znajduje się na * twojej * ścieżce, jeśli w ogóle. –

0

Java ma ustawić zmienną JAVA_HOME, gdy jest zainstalowana. Użyj tego, aby znaleźć lokalizację Java:

if not "%JAVA_HOME%" == "" goto HasJavaHome 

:HasJavaHome 
set JAVA_HOME=... // Your new value goes here. 
+0

Chcę "odkryć", gdzie jest java. – flybywire

+1

Java nigdy nie ustawił zmiennej JAVA_HOME po zainstalowaniu. Jest to konwencja używana, aby umożliwić programowi zapisującemu skryptowi zezwolenie użytkownikowi systemu na określenie konkretnej wersji języka Java, która będzie używana podczas uruchamiania aplikacji, ponieważ może być zainstalowana więcej niż jedna wersja. – McDowell

0

Jeśli JAVA_HOME nie jest już ustawiony, a chcesz go ustawić, to prawdopodobnie trzeba zrobić coś jak

dir java.exe /B /S 

który daje lista wszystkich katalogów zawierających plik java.exe. Stamtąd możesz wyprowadzić to wyjście do innego polecenia, które analizuje wyniki i wybiera jeden z tych katalogów, a następnie używa go do ustawienia zmiennej JAVA_HOME.

+2

To działa tylko z katalogu, w którym jest zainstalowany Java lub z dowolnego jego katalogu. Nie zadziała, na przykład jeśli uruchomi się z C: \, podczas gdy java jest zainstalowana gdzieś na D: \ – eleven81

1

Chociaż nie jest idealny, można użyć następujących odkryć bieżący folder JRE:

for /d %%i in ("\Program Files\Java\jre*") do set JAVA_HOME=%%i 

Jeśli to JDK chcesz, zastosowanie:

for /d %%i in ("\Program Files\Java\jdk*") do set JAVA_HOME=%%i` 

Dla bardziej solidnego rozwiązania opartego na sprawdzenie rejestru Windows, użyj:

set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment 
set Cmd=reg query "%KeyName%" /s 
for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j 

Dla JDK potrzebujesz tej linii:

set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit 
0

Oto poręczny mały plik wsadowy, który przeszuka wszystko na twojej ścieżce pod kątem pierwszego wystąpienia pliku. Magiczny kawałek to %% ~ dp $ PATH: i %% i w pętli for. %% ~ dp rozwinie następną zmienną tylko do litery dysku i ścieżki. $ PATH: szukam ścieżki dla pierwszego wystąpienia %% i, która jest nazwą pliku przekazywaną do pętli for.

przykład: Where.bat

@echo off 
setlocal 

if "%1"=="" goto USAGE 
set filename=%1 

for %%i in (%filename%) do @echo %%~dp$PATH:i%%i 

goto EOF 

:USAGE 

echo %0 filename 

:EOF 
endlocal 
4

Można użyć wartości przechowywanych w rejestrze, aby automatycznie wykryć, gdzie jest zainstalowany i konfiguracja Java zmienną JAVA_HOME.

HKLM > Software > JavaSoft > Java Runtime Environment 

W tym miejscu jest klucz o nazwie CurrentVersion. Ta wersja odwołuje się do jednego z katalogów na tym poziomie po nazwie. Otwieranie katalogu udostępnia inny klucz o nazwie JavaHome. Wartość JavaHome jest ścieżką systemu plików, która może być użyta do zdefiniowania zmiennej środowiskowej JAVA_HOME.

w pliku wsadowym można zrobić coś takiego:

FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B 

FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\%CurVer%" /v JavaHome') DO set JAVA_HOME=%%B 

Jeśli chcesz dowiedzieć się więcej, mam napisane tutorial opisując, co jest potrzebne do skonstruowania plik wsadowy do auto-odkryć JAVA_HOME.

5

To rozwiązanie zależy od zainstalowanego JDK w% ProgramFiles% \ Java, na przykład C: \ Program Files \ Java \ jdk1.6.0_18. Możesz zmienić linię "ustaw JDK_Version = 1.6" na wersję, której chcesz użyć, taką jak "ustaw JDK_Version = 1.5".

Zakładając, że najnowsza wersja JDK znajduje się u dołu listy (jdk% jdk_Version% *), najnowsza dostępna wersja powinna zostać ustawiona jako JAVA_HOME. Jeśli nie można znaleźć JDK, JAVA_HOME nie zostanie zmieniony. Jeśli nie można znaleźć JDK, a JAVA_HOME nie ma wartości, skrypt wyświetli komunikat o błędzie.

@echo off 
rem set the version of jdk you would like to use (1.4, 1.5, 1.6, etc) 
set JDK_Version=1.6 

echo. 
echo Locating JDK %JDK_Version% 

for /d %%i in ("%ProgramFiles%\Java\jdk%jdk_Version%*") do (set Located=%%i) 
rem check if JDK was located 
if "%Located%"=="" goto else 
rem if JDK located display message to user 
rem update %JAVA_HOME% 
set JAVA_HOME=%Located% 
echo  Located JDK %jdk_Version% 
echo  JAVA_HOME has been set to: 
echo   %JAVA_HOME% 
goto endif 

:else 
rem if JDK was not located 
rem if %JAVA_HOME% has been defined then use the existing value 
echo  Could not locate JDK %JDK_Version% 
if "%JAVA_HOME%"=="" goto NoExistingJavaHome 
echo  Existing value of JAVA_HOME will be used: 
echo   %JAVA_HOME% 
goto endif 

:NoExistingJavaHome 
rem display message to the user that %JAVA_HOME% is not available 
echo  No Existing value of JAVA_HOME is available 
goto endif 

:endif 
rem clear the variables used by this script 
set JDK_Version= 
set Located= 
0

Nie przeszukuje całego dysku twardego. Przeszukuje tylko drzewo katalogów nadrzędnych, a więc jest znacznie szybsze niż przy użyciu "dir java.exe/B/S".

@ECHO off 
ECHO ------------------------------------------------------------------ 
ECHO Define the location of an existing JDK install by 
ECHO searching for Javasoft JDK distrobution in parent 
ECHO directories. 
ECHO. 
ECHO Script does not add trailing slash. 
ECHO ------------------------------------------------------------------ 
IF DEFINED JAVA_HOME (
    ECHO JAVA_HOME is already set. 
    GOTO :JHSET 
) 
SET matchobject=Javasoft\bin\java.exe 
SET "dir=%~f0" 
:LOOP 
CALL :FGETDIR "%dir%" 
IF EXIST "%dir%\%matchobject%" (
    ECHO Found JAVA_HOME at %dir%\ 
    GOTO :HOMESET 
) 
IF "%dir:~-1%" == ":" (
    ECHO Reached root and directory containing "%matchobject%" not found. 
    GOTO :EOF 
) 
GOTO :LOOP 
:HOMESET 
SET JAVA_HOME=%dir% 
GOTO :JHSET 
:: function section 
:FGETDIR 
SET "dir=%~dp1" 
SET "dir=%dir:~0,-1%" 
EXIT /B 0 
:: end function section 
:JHSET 
:: Does JAVA_HOME have a trailing slash? If so remove it. 
IF !JAVA_HOME:~-1!==\ SET JAVA_HOME=!JAVA_HOME:~0,-1! 
ECHO JAVA_HOME is %JAVA_HOME% 
ECHO Will close in a few seconds... 
ping -n 60 127.0.0.1>nul 
Powiązane problemy