12

バッチ スクリプトから JAVA_HOME 変数を設定したい

4

9 に答える 9

11

このスニペットは、java.exe の現在の PATH を検索し、見つかった場所を出力します。

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%
)
于 2009-03-12T15:59:37.060 に答える
7

レジストリに保存されている情報に基づいて現在の Java インストールを取得するには、「BAT ファイルから現在の Java バージョンを取得する」を参照してください。

于 2009-03-12T21:39:10.973 に答える
6

この解決策は、JDK が %ProgramFiles%\Java にインストールされているかどうかによって異なります (例: C:\Program Files\Java\jdk1.6.0_18)。「set JDK_Version=1.6」という行を、「set JDK_Version=1.5」など、使用したいバージョンに変更できます。

JDK の最新バージョンがリストの一番下 (jdk%jdk_Version%*) にあると仮定すると、利用可能な最新バージョンは 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=
于 2010-03-17T19:03:30.363 に答える
5

レジストリに保存されている値を使用して、Java がインストールされている場所を自動的に検出し、JAVA_HOME 変数をセットアップできます。

HKLM > Software > JavaSoft > Java Runtime Environment

この場所には、CurrentVersion というキーがあります。このバージョンは、このレベルのディレクトリの 1 つを名前で参照します。ディレクトリを開くと、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 を自動検出するバッチ ファイルを作成するために必要なものを説明したチュートリアルを作成しました。

于 2009-06-18T21:18:08.993 に答える
2

完全ではありませんが、以下を使用して現在の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
于 2009-05-29T00:33:10.393 に答える
1

JAVA_HOMEがまだ設定されておらず、設定したい場合は、おそらく次のようなことを行う必要があります。

dir java.exe /B /S

これにより、java.exeファイルを含むすべてのディレクトリのリストが表示されます。そこから、その出力を別のコマンドにパイプして、結果を解析し、それらのディレクトリの1つを選択して、それを使用してJAVA_HOME変数を設定できます。

于 2009-03-12T12:15:07.220 に答える
0

Javaは、インストール時にJAVA_HOME変数を設定することになっています。これを使用して、Javaの場所を見つけます。

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

:HasJavaHome
set JAVA_HOME=... // Your new value goes here.
于 2009-03-12T12:07:39.640 に答える
0

これは、ハード ドライブ全体を検索するわけではありません。親ディレクトリ ツリーのみを検索するため、「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
于 2011-10-20T01:42:10.767 に答える