2009-03-12 29 views

Trả lời

9

đoạn này sẽ tìm kiếm PATH hiện tại cho java.exe, và in ra nơi nó được tìm thấy:

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

Trên hệ thống của tôi này mang lại cho tôi

C: \ WINDOWS \ system32 \

Sử dụng này, bạn có thể thiết lập JAVA_HOME như sau:

@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 không phải là nơi JRE sẽ được cài đặt. Xem http://mindprod.com/jgloss/registry.html#JAVAFIND JAVA_HOME thường được sử dụng trong các tập lệnh trong biểu mẫu này để khởi chạy ứng dụng:% JAVA_HOME% \ bin \ java – McDowell

+0

Tôi không nói đó là, nhưng đó là nơi nó xảy ra để cư trú trong đường dẫn của tôi. Từ một câu trả lời khác (hoặc nhận xét cho câu trả lời khác, tôi không biết, nó đã bị xóa), bạn * có thể * có trình cài đặt sao chép java.exe vào thư mục% systemroot% \ system32. Trên hệ thống của tôi, nó dường như có. –

+0

Giải pháp của tôi sẽ tìm thấy nơi java.exe nằm trên * đường dẫn * của bạn, nếu có. –

0

Java được thiết lập biến JAVA_HOME khi được cài đặt. Sử dụng điều này để tìm vị trí của Java:

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

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

tôi muốn "khám phá" nơi java là. – flybywire

+1

Java chưa bao giờ đặt biến JAVA_HOME khi được cài đặt. Nó là một quy ước được sử dụng để cho phép người viết kịch bản cho phép người dùng hệ thống chỉ định một phiên bản Java cụ thể để sử dụng khi khởi chạy một ứng dụng vì có thể có nhiều hơn một phiên bản được cài đặt. – McDowell

0

Nếu JAVA_HOME chưa được thiết lập, và bạn muốn cài đặt nó, sau đó bạn có thể cần phải làm một cái gì đó giống như

dir java.exe /B /S 

mà sẽ cung cấp cho bạn danh sách tất cả các thư mục chứa tệp java.exe. Từ đó bạn có thể tạo đường dẫn đến một lệnh khác phân tích các kết quả và chọn một trong các thư mục đó, sau đó sử dụng nó để thiết lập biến JAVA_HOME.

+2

Điều này sẽ chỉ hoạt động chạy từ thư mục nơi java được cài đặt, hoặc từ bất kỳ thư mục nào của thư mục đó. Nó sẽ không hoạt động, ví dụ, nếu chạy từ C: \ trong khi java được cài đặt ở đâu đó trên D: \ – eleven81

1

Mặc dù không hoàn hảo, bạn có thể sử dụng sau đây để khám phá những thư mục JRE hiện tại:

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

Nếu nó JDK mà bạn muốn, sử dụng:

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

Đối với một giải pháp mạnh mẽ hơn dựa trên kiểm tra Sổ đăng ký Windows, sử dụng:

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 

Đối với JDK, bạn cần dòng này thay thế:

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

Đây là một tệp hàng loạt tiện dụng nhỏ sẽ tìm kiếm mọi thứ trong đường dẫn của bạn cho lần xuất hiện đầu tiên của tệp. Bit nhỏ huyền diệu là %% ~ dp $ PATH: i %% i trong vòng lặp for. %% ~ dp sẽ mở rộng biến tiếp theo cho ký tự ổ đĩa và đường dẫn chỉ. $ PATH: tôi tìm đường dẫn cho lần xuất hiện đầu tiên của %% i là tên tệp được chuyển vào vòng lặp for.

dụ: 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

Bạn có thể sử dụng các giá trị được lưu trữ trong registry để tự động khám phá nơi Java được cài đặt và thiết lập biến JAVA_HOME.

HKLM > Software > JavaSoft > Java Runtime Environment 

Tại vị trí này là Khóa được gọi là CurrentVersion. Phiên bản này tham chiếu một trong các thư mục ở cấp này theo tên. Việc mở thư mục sẽ hiển thị một khóa khác có tên là JavaHome. Giá trị của JavaHome là một đường dẫn hệ thống tệp có thể được sử dụng để xác định biến môi trường của bạn JAVA_HOME.

Trong một tập tin batch bạn có thể làm một cái gì đó như:

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 

Nếu bạn muốn đọc nhiều hơn, tôi đã viết một tutorial mô tả những gì là cần thiết để xây dựng một tập tin batch để tự động phát hiện JAVA_HOME.

5

Giải pháp này phụ thuộc vào JDK đang được cài đặt trong% ProgramFiles% \ Java, ví dụ: C: \ Program Files \ Java \ jdk1.6.0_18. Bạn có thể thay đổi dòng "set JDK_Version = 1.6" thành phiên bản bạn muốn sử dụng như "set JDK_Version = 1.5".

Giả sử rằng phiên bản mới nhất của JDK sẽ nằm ở cuối danh sách (jdk% jdk_Version% *) phiên bản mới nhất có sẵn sẽ được đặt là JAVA_HOME. Nếu không thể tìm thấy JDK, JAVA_HOME sẽ không bị thay đổi. Nếu không thể tìm thấy JDK và JAVA_HOME không có giá trị thì tập lệnh sẽ hiển thị thông báo lỗi.

@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

Thao tác này không tìm kiếm toàn bộ ổ cứng. Nó chỉ tìm kiếm cây thư mục cha và vì vậy nó nhanh hơn nhiều so với việc sử dụng "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 
Các vấn đề liên quan