Tôi muốn đặt biến JAVA_HOME từ tập lệnh batchKhám phá từ một tập tin thực thi được cài đặt Java ở đâu?
Trả lời
đ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%
)
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
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ó. –
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ó. –
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.
tôi muốn "khám phá" nơi java là. – flybywire
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
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.
Đ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
Xem Get the current Java version from a BAT file để cài đặt Java hiện tại dựa trên các thông tin được lưu trữ trong sổ đăng ký.
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
Đâ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
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.
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=
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
- 1. Làm thế nào để phát hiện Java được cài đặt thông qua REGEDIT.exe từ một tập tin thực thi?
- 2. Liệu một thực thi có thể khám phá ra con đường riêng của nó? (Linux)
- 3. "Trình khám phá tệp" ở đâu trong IntelliJ?
- 4. Tập tin .R ở đâu trên PC?
- 5. Chạy cào từ tập tin thực thi
- 6. Cài đặt easy_install ở đâu?
- 7. Trình khám phá tệp bằng Java - cách thực hiện?
- 8. Trình khám phá tập tin của Samsung của tôi: Chọn tập tin Intent
- 9. Mở một thư mục trong trình khám phá và chọn một tập tin
- 10. chạy một tập tin thực thi từ C#
- 11. Chạy Java thực thi mà không cần cài đặt JRE?
- 12. Bản đồ: E đến: Khám phá ở chế độ lệnh?
- 13. Cách tạo tệp cài đặt sẽ cài đặt một tệp thực thi Jar
- 14. cmake: cài đặt tập tin thực thi và tạo liên kết đến chúng
- 15. Thực thi trong một tập tin chiến tranh
- 16. Vấn đề thực hiện một tập tin thực thi trong một ứng dụng Java
- 17. Nút "Lọc theo giải pháp" trong Trình khám phá nhóm VS2012 ở đâu?
- 18. Khám phá USB thiết bị Mass Storage với Java
- 19. cx_Freeze. Cách cài đặt dịch vụ và thực thi tập lệnh sau khi cài đặt
- 20. Python unittest và khám phá
- 21. xcrun: Lỗi: không thực thi được xcrun thực. (Không có tập tin hoặc thư mục nào)
- 22. xây dựng giải pháp .net từ tập tin thực thi
- 23. Java được cài đặt, trong danh sách, nhưng thực hiện sản xuất "./java: Không có tập tin hoặc thư mục"
- 24. Qt tạo tập tin thực thi
- 25. Khám phá thiết bị mạng
- 26. Sử dụng dlopen() trên một tập tin thực thi
- 27. có/không có tập tin thực thi
- 28. Windows CMD - Đặt lại đường dẫn biến từ tập tin thực thi?
- 29. Thực thi tập tin thực thi từ C# Sự cố cấp phép
- 30. Tập tin cài đặt Vim trên Windows
Tiêu đề và câu hỏi của bạn là đối lập. Đó là nó, có được hoặc thiết lập? –