문제

로 설정하고 싶습니 JAVA_HOME 변수는 배치에서 스크립트

도움이 되었습니까?

해결책

이 스 니펫은 java.exe의 현재 경로를 검색하고 발견 된 위치를 인쇄합니다.

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

내 시스템에서 이것은 나에게 제공합니다

C : Windows System32

이것을 사용하면 다음과 같이 java_home을 설정할 수 있습니다.

@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%
)

다른 팁

보다 BAT 파일에서 현재 Java 버전을 가져옵니다 레지스트리에 저장된 인포를 기반으로 현재 Java 설치를 얻으려면.

이 솔루션은 %programfiles % java 아래에 설치되는 JDK, 예를 들어 c : program files java jdk1.6.0_18에 따라 다릅니다. "SET JDK_VERSION = 1.5"와 같이 사용하려는 버전으로 "SET JDK_VERSION = 1.6"을 변경할 수 있습니다.

최신 버전의 JDK가 목록의 맨 아래에 있다고 가정하면 사용 가능한 최신 버전은 Java_home으로 설정해야합니다. JDK를 찾을 수없는 경우 java_home은 변경되지 않습니다. JDK를 찾을 수없고 java_home에 값이 없으면 스크립트에 오류 메시지가 표시됩니다.

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

레지스트리에 저장된 값을 사용하여 Java가 설치된 위치를 자동으로 발견하고 Java_home 변수를 설정할 수 있습니다.

HKLM > Software > JavaSoft > Java Runtime Environment

이 위치에는 CurrentVersion이라는 키가 있습니다. 이 버전은이 레벨의 디렉토리 중 하나를 이름으로 언급합니다. 디렉토리 열기는 Javahome이라는 또 다른 키를 노출시킵니다. Javahome의 값은 환경 변수 Java_home을 정의하는 데 사용할 수있는 파일 시스템 경로입니다.

배치 파일 내에서 다음과 같은 작업을 수행 할 수 있습니다.

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

더 읽고 싶다면 지도 시간 java_home을 자동으로 제공하기 위해 배치 파일을 구성하는 데 필요한 내용을 설명합니다.

완벽하지는 않지만 다음을 사용하여 현재 JRE 폴더를 발견 할 수 있습니다.

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

원하는 JDK라면 사용하십시오.

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

Windows 레지스트리 확인을 기반으로보다 강력한 솔루션을 사용하려면 다음을 사용하십시오.

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

JDK의 경우 대신이 라인이 필요합니다.

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

java_home이 아직 설정되지 않았고 설정하고 싶다면 아마도 같은 일을해야합니다.

dir java.exe /B /S

java.exe 파일이 포함 된 모든 디렉토리 목록을 제공합니다. 거기에서 결과를 구문 분석하고 해당 디렉토리 중 하나를 선택한 다른 명령에 해당 출력을 파이프로 파이프 한 다음이를 사용하여 Java_home 변수를 설정합니다.

자바를 설정합니 JAVA_HOME 변수할 때의 설치됩니다.이를 사용하여 위치를 찾을 수 있 Java:

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

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

다음은 파일의 첫 번째 발생을 위해 경로의 모든 것을 검색하는 편리한 작은 배치 파일입니다. 마법의 작은 부분은 for 루프의 %% ~ dp $ 경로입니다 : i %% i. %% ~ DP는 다음 변수를 드라이브 문자 및 경로로만 확장합니다. $ 경로 : 나는 For Loop으로 전달되는 파일 이름 인 %% I의 첫 번째 발생 경로를 검색합니다.

예시: 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

이것은 전체 하드 드라이브를 검색하지 않습니다. 부모 디렉토리 트리 만 검색하므로 "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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top