yakazaa
Goto Top

BATCH Aktuellste installierte JAVA-Runtime auslesen und als Variable abspeichern

Hallo zusammen,

ich habe mal wieder mit BATCH Dateien zu tun.
Aufgabe ist ganz einfach: Aktuellste installierte JAVA-Runtime auslesen und als Variable abspeichern.
das blöde daran: Keine Ahnung wie das gehen soll...

Grundsätzlich habe ich mir schon ein paar Gedanken gemacht:

Unter der Variable %CLASSPATH% gibt es einen grundsätzlich brauchbaren Pfad, z.B.:
echo %CLASSPATH%
und das ergibt dann:
.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip

Die Ausgabe ist ja schonmal nicht schlecht. müsste jetzt ersteinmal in eine neue Variable.
Mein Vorschlag:
SET JAVA_VAR =%CLASSPATH%
ergibt:
ECHO %CLASSPATH%
.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip

So weit so schlecht...

Jetzt brauche ich aber nur den Bereich "C:\Program Files\Java\jre6\", wie kann ich das "rausschreiben" ?

Freue mich auf eure Ideen,

Gruß Dominik

Content-Key: 169576

Url: https://administrator.de/contentid/169576

Printed on: April 20, 2024 at 06:04 o'clock

Member: DerWoWusste
DerWoWusste Jul 12, 2011 at 12:35:50 (UTC)
Goto Top
Hi.

Wie wär's mit
if %PROCESSOR_ARCHITECTURE%==AMD64 goto 64
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion') DO SET Version=%%B  
ECHO Version=%Version%
goto end
:64
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion') DO SET Version=%%B  
ECHO Version=%Version%
:end

Ausgabe:
Version=1.6.0_25
Member: yakazaa
yakazaa Jul 12, 2011 at 12:56:56 (UTC)
Goto Top
1A, vielen Dank !

Habe es noch etwas abgeändert, da er bei einem x86 OS anschließend auch immer den x64 Hive durchsucht hat. face-smile

REM -----------------------------------------------------------------------------------------------------
REM Ermittlung Java Version
REM Abfrage ob 64-Bit Betriebssystem
IF EXIST "C:\Program Files (x86)\Common Files\" GOTO x64   
REM Abfolge bei 32-Bit Betriebssystem
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion') DO SET Version=%%B   
GOTO TEST
REM Abfolge bei 64-Bit Betriebssystem
:x64 
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion') DO SET Version=%%B   

:TEST
REM -----------------------------------------------------------------------------------------------------
REM Nur für Testzwecke:
ECHO Java Version: %Version%
pause
Member: Skyemugen
Skyemugen Jul 12, 2011 at 13:01:21 (UTC)
Goto Top
Aloha,

edit zu warm heute, steht ja schon oben ... nevermind *sigh*

greetz André
Member: yakazaa
yakazaa Jul 12, 2011 at 13:05:53 (UTC)
Goto Top
Danke dir, aber jetzt isses fertig face-smile
Member: yakazaa
yakazaa Jul 12, 2011 at 13:10:25 (UTC)
Goto Top
Ok, ist doch sauberer habe ich mir soeben sagen lassen:

Es gibt Programminstallationen die auch für ein x86 OS einen "Program Files x86" - Ordner anlegen...
Also sowas...

REM -----------------------------------------------------------------------------------------------------
REM Ermittlung Java Version
REM Abfrage ob 64-Bit Betriebssystem
GOTO %PROCESSOR_ARCHITECTURE%

:x86 
REM Abfolge bei 32-Bit Betriebssystem
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion') DO SET Version=%%B   
GOTO TEST
REM Abfolge bei 64-Bit Betriebssystem
:x64 
FOR /F "tokens=2* delims=	 " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /v Java6FamilyVersion') DO SET Version=%%B   

:TEST
REM -----------------------------------------------------------------------------------------------------
REM Nur für Testzwecke:
ECHO Java Version: %Version%
pause
Member: Friemler
Friemler Jul 12, 2011 at 13:21:35 (UTC)
Goto Top
Hallo yakazaa,

ich hätte da noch was: Was ist wenn die Java-Version von 1.6 nach 1.7 oder so wechselt?

Hier meine Lösung dazu. Es wird in allen Unterschlüsseln des schon bekannten Registryschlüssels nach einem Wert namens FullVersion gesucht.
Die Unterscheidung zwischen x86 und x64 mache ich immer über die Abfrage, ob die Variable ProgramFiles(x86) existiert.
@echo off & setlocal

if not defined ProgramFiles(x86) (
  set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment"  
) else (
  set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment"  
)

for /f "tokens=3" %%a in ('reg query "%RegKey%" /s ^| findstr /i /r /c:"^ * FullVersion"') do (  
  set "JRE-Version=%%a"  
)

echo %JRE-Version%

Ausgabe:
1.6.0_26-b03
Genauer geht's nicht face-wink .


Gruß
Friemler
Member: yakazaa
yakazaa Jul 12, 2011 at 13:23:46 (UTC)
Goto Top
Guter Punkt Friemler, vielen Dank !
Starte dann mal das nächste Roll-Out....
Oder hat jemand noch etwas ? face-smile
Member: yakazaa
yakazaa Jul 12, 2011 at 13:29:49 (UTC)
Goto Top
Achso:

Schlussendlich wird diese %Version% Variable in einen Pfad eingebaut, der eine .jar Datei aufruft:


SET JRE="C:\Program Files\Java\jre%Version%\bin"

Mit "Friemlers" Version ist die Ausgabe aber

1.6.0_26-b03

Der Pfad müsste aber

SET JRE="C:\Program Files\Java\jre1.6.0_26\bin" sein.

Derzeit (mit der alten Version):
SET JRE="C:\Program Files\Java\jre%Version%\bin"
klappt es allerdings...
Krieg ich bitte noch ein Update ? face-smile
Member: Friemler
Friemler Jul 12, 2011 at 13:34:15 (UTC)
Goto Top
Tjaaa, dann holen wir uns doch gleich das InstallDir:
@echo off & setlocal

if not defined ProgramFiles(x86) (
  set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment"  
) else (
  set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment"  
)

for /f "tokens=2*" %%a in ('reg query "%RegKey%" /s ^| findstr /i /r /c:"^ * InstallDir"') do (  
  set "JRE-InstallDir=%%bbin"  
)

echo %JRE-InstallDir%

Gruß
Friemler
Member: yakazaa
yakazaa Jul 12, 2011 at 13:44:34 (UTC)
Goto Top
Ok, und damit nutzt er (wenn mehrere gleichzeitig installiert wären) immer die Aktuellste, richtig ?
Member: Friemler
Friemler Jul 12, 2011 at 14:36:20 (UTC)
Goto Top
Zitat von @yakazaa:
wenn mehrere gleichzeitig installiert wären

geht das überhaupt? Ich denke nicht.
Member: Skyemugen
Skyemugen Jul 12, 2011 at 14:52:22 (UTC)
Goto Top
Aloha Friemler,

doch ist möglich (zumindest auf XP-Kisten)

greetz André
Member: Friemler
Friemler Jul 12, 2011 at 15:01:48 (UTC)
Goto Top
Zitat von @Friemler:
> Zitat von @yakazaa:
> ----
> wenn mehrere gleichzeitig installiert wären

geht das überhaupt? Ich denke nicht.

Zitat von @Skyemugen:
doch ist möglich (zumindest auf XP-Kisten)

Dann hat JRE-InstallDir den Wert des Schlüsselwertes INSTALLDIR von der als letztes in der Registry auftauchenden Java-Version. Ob die jetzt immer nach Versionsnummern geordnet dort eingetragen sind weiß ich nicht.

Gruß
Friemler
Member: yakazaa
yakazaa Jul 12, 2011 at 15:45:11 (UTC)
Goto Top
Ach das wird schon passen, sonst müssen DIE beiden Anwender, die mehr Java Versionen installiert haben das halt händisch eintragen... face-smile Vielen Dank nochmal für eure Hilfe !!!