我想从批处理脚本设置JAVA_HOME变量

有帮助吗?

解决方案

这个片段将搜索的java.exe电流路径时,并打印出那里发现:

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

在我的系统中,这给了我

  

C:\窗口\ 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安装。

此溶液依赖于JDK被下安装%PROGRAMFILES%\爪哇,例如C:\ Program Files文件\爪哇\ jdk1.6.0_18。您可以更改线路“设置JDK_Version = 1.6”的版本,你想如“设置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=

其中安装了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的应该设置JAVA_HOME变量它的安装时。使用此找到了Java的位置:

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

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

下面是一个方便的小批处理文件,将在您的路径搜索家居文件中第一次出现。神奇的一点就是%%〜DP $ PATH:我%%我在for循环。 %%〜DP将扩大下一个变量的驱动器号和路径。的$ PATH:ⅰ搜索路径的%%第一次出现我其是传递到for循环的文件名

例如:的 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