Frage

Ich mag die Variable JAVA_HOME aus einem Batch-Skript setzen

War es hilfreich?

Lösung

Dieser Code-Schnipsel zeigt die aktuelle PATH für java.exe suchen und ausdrucken, wo es gefunden wurde:

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

Auf meinem System gibt mir

  

C: \ WINDOWS \ system32 \

Mit diesem können Sie JAVA_HOME wie folgt festgelegt:

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

Andere Tipps

Siehe Erhalten Sie die aktuelle Java-Version von einer BAT-Datei den Strom zu erhalten Java-Installation auf der Grundlage der in der Registrierung gespeicherten Angaben.

Diese Lösung hängt von der JDK wird unter% installierten Programme% \ Java, zum Beispiel C: \ Programme \ Java \ jdk1.6.0_18. Sie können die Zeile „set JDK_Version = 1,6“ auf die Version, die Sie wie „gesetzt JDK_Version = 1,5“ verwendet werden sollen.

Unter der Annahme, dass die neueste Version von JDK am Ende der Liste sein würde (jdk% jdk_Version% *) die neueste Version sollte als JAVA_HOME eingestellt wird. Wenn das JDK nicht gefunden werden kann JAVA_HOME nicht geändert werden. Wenn das JDK nicht gefunden werden kann und JAVA_HOME hat keinen Wert das Skript wird eine Fehlermeldung angezeigt werden.

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

Sie können die Werte in der Registry gespeichert verwenden, um automatisch zu entdecken, wo Java die Variable JAVA_HOME installiert und konfiguriert wird.

HKLM > Software > JavaSoft > Java Runtime Environment

An dieser Stelle ist ein Schlüssel namens Currentversion. Diese Version verweist auf eines der Verzeichnisse auf dieser Ebene mit Namen. das Verzeichnis öffnen macht einen weiteren Schlüssel namens Javahome. Der Wert von Javahome ist ein Dateisystempfad, die verwendet werden können, Ihre Umgebungsvariable JAVA_HOME zu definieren.

Innerhalb einer Batch-Datei, die Sie so etwas wie tun:

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

Wenn Sie mehr lesen wollen, habe ich eine Tutorial beschreiben, was benötigt wird, eine Batchdatei zu konstruieren auto-entdecken JAVA_HOME.

Während nicht perfekt, können Sie mit dem Anschluss an den aktuellen JRE-Ordner zu entdecken:

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

Wenn es das JDK Sie wollen, verwenden Sie:

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

Für eine robustere Lösung basierend auf der Windows-Registrierung überprüft, zu verwenden:

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

Für das JDK, werden Sie diese Zeile benötigen statt:

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

Wenn JAVA_HOME nicht bereits gesetzt ist, und Sie wollen es setzen, dann müssen Sie wahrscheinlich so etwas wie

tun
dir java.exe /B /S

, die Ihnen eine Liste aller Verzeichnisse die Datei java.exe enthält. Von dort können Sie Rohr, dass die Ausgabe an einen anderen Befehl, der die Ergebnisse und wählt eines dieser Verzeichnisse analysiert, dann verwendet er die Variable JAVA_HOME zu setzen.

Java soll die Variable JAVA_HOME einrichten, wenn es installiert ist. Hiermit können Sie die Position von Java finden:

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

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

Hier ist eine handliche kleine Batchdatei, die alles in Ihrem Weg zum ersten Auftreten einer Datei suchen. Das magisch wenig ist die %% ~ dp $ PATH: i %% i in dem for-Schleife. %% ~ dp wird die nächste Variable auf den Laufwerksbuchstaben und den Pfad nur erweitern. Die $ PATH: i sucht den Weg für das erste Vorkommen von %% i, ist der Dateiname, der in der for-Schleife geführt wird

.

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

Dies ist nicht die gesamte Festplatte suchen. Es sucht nur den übergeordneten Verzeichnisbaum und so sein viel schneller als mit „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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top