Question

Je souhaite définir la variable JAVA_HOME à partir d'un script batch

Était-ce utile?

La solution

Cet extrait recherchera java.exe dans le PATH actuel et imprimera où il a été trouvé:

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

Sur mon système, cela me donne

  

C: \ WINDOWS \ system32 \

Utilisez ceci pour définir JAVA_HOME comme suit:

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

Autres conseils

Voir Obtenir la version actuelle de Java à partir d'un fichier BAT pour obtenir la version actuelle. Installation Java basée sur les informations stockées dans le registre.

Cette solution dépend de l'installation du JDK sous% ProgramFiles% \ Java, par exemple C: \ Program Files \ Java \ jdk1.6.0_18. Vous pouvez modifier la ligne "set JDK_Version = 1.6". vers la version que vous souhaitez utiliser, telle que "set JDK_Version = 1.5".

En supposant que la dernière version de JDK se trouve au bas de la liste (jdk% jdk_Version% *), la dernière version disponible doit être définie sur JAVA_HOME. Si le JDK est introuvable, JAVA_HOME ne sera pas modifié. Si le JDK est introuvable et que JAVA_HOME n'a pas de valeur, le script affiche un message d'erreur.

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

Vous pouvez utiliser les valeurs stockées dans le registre pour déterminer automatiquement où Java est installé et configurer la variable JAVA_HOME.

HKLM > Software > JavaSoft > Java Runtime Environment

À cet emplacement se trouve une clé appelée CurrentVersion. Cette version référence l'un des répertoires de ce niveau par son nom. L’ouverture du répertoire expose une autre clé appelée JavaHome. La valeur de JavaHome est un chemin de système de fichiers qui peut être utilisé pour définir votre variable d’environnement JAVA_HOME.

Dans un fichier de commandes, vous pouvez faire quelque chose comme:

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

Si vous voulez en savoir plus, j'ai écrit un tutoriel décrivant les éléments nécessaires à la création d’un fichier de traitement par lots pour la détection automatique de JAVA_HOME.

Bien que cela ne soit pas parfait, vous pouvez utiliser les éléments suivants pour découvrir le dossier JRE actuel:

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

Si vous souhaitez utiliser le JDK, utilisez:

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

Pour une solution plus robuste basée sur la vérification du registre Windows, utilisez:

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

Pour le JDK, vous aurez plutôt besoin de cette ligne:

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

Si JAVA_HOME n'est pas déjà défini et que vous souhaitez le définir, vous devrez probablement faire quelque chose comme

.
dir java.exe /B /S

qui vous donnera une liste de tous les répertoires contenant le fichier java.exe. À partir de là, vous pouvez diriger cette sortie vers une autre commande qui analyse les résultats et sélectionne l’un de ces répertoires, puis l’utilise pour définir la variable JAVA_HOME.

Java est supposé configurer la variable JAVA_HOME lorsqu’elle est installée. Utilisez-le pour trouver l'emplacement de Java:

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

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

Voici un petit fichier batch pratique qui recherchera tout ce qui se trouve sur votre chemin pour la première occurrence d’un fichier. Le petit peu magique est le %% ~ dp $ PATH: i %% i dans la boucle for. %% ~ dp élargira la variable suivante à la lettre de lecteur et au chemin uniquement. $ PATH: i recherche dans le chemin la première occurrence de %% i, qui est le nom du fichier transmis à la boucle for.

exemple: 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

Ceci ne recherche pas l’ensemble du disque dur. Il recherche uniquement dans l’arborescence des répertoires parents et est donc beaucoup plus rapide que l’utilisation de "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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top