Javaversion mit Batch vergleichen und Übergabe Variable an VBScript
Hallo Leute,
Hab mal wieder ein Spezialfall für euch Profis
Folgender Sachverhalt:
Ein selbstgeschriebenes Programm namens "Breadcrumb" schreibt ins Javaverzeichnis Dateien und bei jedem Javaupdate werden diese Dateien überschrieben, woraufhin die Software nicht mehr funktioniert
Ich möchte nun ein BatchScript erstellen, welches nachsieht, ob sich die Javaversion geändert hat und dementsprechend die fehlenden Dateien wieder zurückschreibt.
Erschwerend kommt noch hinzu das ich den Verküpfungspfad des Progamms auch noch auf den neuen Javapfad ändern muss. Der derzeitige und zukünftige Java Pfad ist
"C:\Program Files (x86)\Java\aktuelleJavaversion" derzeit "C:\Program Files (x86)\Java\jre1.8.0_144" Das Javaupdate wird automatisch installiert und kann auch nicht verhindert werden.
Der jre.... Ordner ändert sich logischerweise nach jedem Java update (von z.B. jre1.8.0_144 auf z.B. jre1.8.0_151)
Angefangen hab ich wie folgt.
1. Mit Batch auslesen, welche Java Version gerade installiert ist bzw. den jre Ordnernamen auslesen und das ganze zum weiterverarbeiten in eine Variable "JVersion" schreiben lassen
Das funktioniert soweit gut und ich hab den Ordnernamen als Variable (z.B. jre1.8.0_144)
Dazu brauche ich jetzt noch eine Lösung, die mir vergleicht, ob die Java Version, die installiert ist, neuer ist, als die, die vorher installiet war u.a. beim update von jre1.8.0.144 auf jre1.8.0.151 und zukünftige Versionen... Hab mir überlegt, den aktuellen Ordnernamen in eine txt Datei zu schreiben und danach vom Batch auslesen und vergleichen zu lassen, allerdings hab ich noch keine Ahnung wie ich das genau mit der if Anweisung machen kann. Naja, nun aber erst mal weiter im Text.
2. Nun kopiere ich mittels robocopy die fehlenden Dateien des Programms Breadcrumb "wing.properties" und "vax.properties" ins Javaverzeichnis "lib"
Das funktioniert soweit auch.
Nun muss ich aber in der Software Breadcrumb noch den Pfad (Ziel) in der Verknüpfung ändern. Das funktioniert allerdings nur über wscript.
Da fängt nun mein großes Problem an. Ich versuche die Variable "JVersion", die ich im Batch Script definiert hab an VBScript zu übergeben, das funktioniert irgendwie nicht.
zumindest ändert mir das Skript den Target Patch nicht ab...
Habt ihr dazu einen Rat? Folgendes habe ich schon zusammengeschustert und jetzt stecke ich fest:
3. Mit folgender Definition übergebe ich die Variable %JVersion% also den Java Ordnernamen an das VBS skript namens "WSC.vbs":
Das VBScript dazu lautet:
Was läuft hier falsch? Ist die Variable JVersion in Zeile 4 so richtig eingebaut? Sorry, kenn mich mit VBS leider nicht wirklich aus.
Hoffe ich habe mich verständlich ausgedrückt, sorry für den langen Text...
Bin für jeden Tipp dankbar. Das würde zumindest mein Wochenende retten
Grüße
Tom
Hab mal wieder ein Spezialfall für euch Profis
Folgender Sachverhalt:
Ein selbstgeschriebenes Programm namens "Breadcrumb" schreibt ins Javaverzeichnis Dateien und bei jedem Javaupdate werden diese Dateien überschrieben, woraufhin die Software nicht mehr funktioniert
Ich möchte nun ein BatchScript erstellen, welches nachsieht, ob sich die Javaversion geändert hat und dementsprechend die fehlenden Dateien wieder zurückschreibt.
Erschwerend kommt noch hinzu das ich den Verküpfungspfad des Progamms auch noch auf den neuen Javapfad ändern muss. Der derzeitige und zukünftige Java Pfad ist
"C:\Program Files (x86)\Java\aktuelleJavaversion" derzeit "C:\Program Files (x86)\Java\jre1.8.0_144" Das Javaupdate wird automatisch installiert und kann auch nicht verhindert werden.
Der jre.... Ordner ändert sich logischerweise nach jedem Java update (von z.B. jre1.8.0_144 auf z.B. jre1.8.0_151)
Angefangen hab ich wie folgt.
1. Mit Batch auslesen, welche Java Version gerade installiert ist bzw. den jre Ordnernamen auslesen und das ganze zum weiterverarbeiten in eine Variable "JVersion" schreiben lassen
for /f "delims=" %%i in ('dir /ad /b "C:\Program Files (x86)\Java\"') do (
set "JVersion=%%i"
)
Das funktioniert soweit gut und ich hab den Ordnernamen als Variable (z.B. jre1.8.0_144)
Dazu brauche ich jetzt noch eine Lösung, die mir vergleicht, ob die Java Version, die installiert ist, neuer ist, als die, die vorher installiet war u.a. beim update von jre1.8.0.144 auf jre1.8.0.151 und zukünftige Versionen... Hab mir überlegt, den aktuellen Ordnernamen in eine txt Datei zu schreiben und danach vom Batch auslesen und vergleichen zu lassen, allerdings hab ich noch keine Ahnung wie ich das genau mit der if Anweisung machen kann. Naja, nun aber erst mal weiter im Text.
2. Nun kopiere ich mittels robocopy die fehlenden Dateien des Programms Breadcrumb "wing.properties" und "vax.properties" ins Javaverzeichnis "lib"
robocopy "c:\javawimb" "C:\Program Files (x86)\Java\%JVersion%\lib" /XN /XO wing.properties vax.properties /r:2 /w:10
Nun muss ich aber in der Software Breadcrumb noch den Pfad (Ziel) in der Verknüpfung ändern. Das funktioniert allerdings nur über wscript.
Da fängt nun mein großes Problem an. Ich versuche die Variable "JVersion", die ich im Batch Script definiert hab an VBScript zu übergeben, das funktioniert irgendwie nicht.
zumindest ändert mir das Skript den Target Patch nicht ab...
Habt ihr dazu einen Rat? Folgendes habe ich schon zusammengeschustert und jetzt stecke ich fest:
3. Mit folgender Definition übergebe ich die Variable %JVersion% also den Java Ordnernamen an das VBS skript namens "WSC.vbs":
wscript //NOLOGO //B C:\javawimb\WSC.vbs "%JVersion%"
Set sh = CreateObject("WScript.Shell")
JVersion = WScript.Arguments.Item(0)
Set shortcut = sh.CreateShortcut("C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Breadcrumb\Breadcrumb Service Tool 3.2.1.lnk")
shortcut.TargetPath = "C:\Program Files (x86)\Java\**JVersion**\bin\javaw.exe"
shortcut.Save
Was läuft hier falsch? Ist die Variable JVersion in Zeile 4 so richtig eingebaut? Sorry, kenn mich mit VBS leider nicht wirklich aus.
Hoffe ich habe mich verständlich ausgedrückt, sorry für den langen Text...
Bin für jeden Tipp dankbar. Das würde zumindest mein Wochenende retten
Grüße
Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 361900
Url: https://administrator.de/contentid/361900
Ausgedruckt am: 26.11.2024 um 14:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Tom
Zu 1 und 2:
Da du ja schon die Variable %JVersion% zusammenbaust, könntest du doch mit dem Batch prüfen lassen, ob eine Datei %JVersion% zb im Benutzerpfad, oder Programmpfad (je nachdem, wie dein Krümmelprogramm programmiert ist) existiert, und wenn nicht, kopiere die beiden *.properties Dateien dorthin. Die Ausgabe des Kopierbefehls würde ich gleich in die Datei %JVersion%.txt schreiben lassen.
In etwa so (ungetestet):
Zu 3:
Die Variable %Path% wird doch beim Installieren von Java um den Wert C:\ProgramData\Oracle\Java\javapath ergänzt, und dort drin ist eine Verknüpfung zur javaw.exe hinterlegt. Warum trägst du nicht diesen Pfad im Target Pfad ein??
Gruss
Zu 1 und 2:
Da du ja schon die Variable %JVersion% zusammenbaust, könntest du doch mit dem Batch prüfen lassen, ob eine Datei %JVersion% zb im Benutzerpfad, oder Programmpfad (je nachdem, wie dein Krümmelprogramm programmiert ist) existiert, und wenn nicht, kopiere die beiden *.properties Dateien dorthin. Die Ausgabe des Kopierbefehls würde ich gleich in die Datei %JVersion%.txt schreiben lassen.
In etwa so (ungetestet):
if not exist %Appdata%\%JVersion%.txt
robocopy "c:\javawimb" "C:\Program Files (x86)\Java\%JVersion%\lib" /XN /XO wing.properties vax.properties /r:2 /w:10 >>%Appdata%\%JVersion%.txt
Zu 3:
Die Variable %Path% wird doch beim Installieren von Java um den Wert C:\ProgramData\Oracle\Java\javapath ergänzt, und dort drin ist eine Verknüpfung zur javaw.exe hinterlegt. Warum trägst du nicht diesen Pfad im Target Pfad ein??
Gruss
Hallo
Bin jetzt auch nicht so der VBS-Guru, aber probier's mal so:
Die Zeile mit dem Wscript.Echo zeigt die Vatriable, die ausgewertet wird, kannst du mit einem Apostroph (') auskommentieren
Das Speichern des Shortcuts unter ProgramData\Microsoft\Windows\Start Menu\Programs\ hat bei mir einen Fehler ausgelöst (ev fehlende Zugriffsrechte), deshalb habe ich den Shortcut auf dem Desktop abgelegt
Gruss
Bin jetzt auch nicht so der VBS-Guru, aber probier's mal so:
Dim JVersion
Set sh = CreateObject("WScript.Shell")
DesktopPath = sh.SpecialFolders("Desktop")
JVersion = WScript.Arguments.Item(0)
WsCript.Echo JVersion
'Set shortcut = sh.CreateShortcut("C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Breadcrumb\Breadcrumb Service Tool 3.2.1.lnk")
Set shortcut = sh.CreateShortcut(DesktopPath & "\Breadcrumb Service Tool 3.2.1.lnk")
shortcut.TargetPath = "C:\Program Files (x86)\Java\" & JVersion & "\bin\javaw.exe"
shortcut.Save
Die Zeile mit dem Wscript.Echo zeigt die Vatriable, die ausgewertet wird, kannst du mit einem Apostroph (') auskommentieren
Das Speichern des Shortcuts unter ProgramData\Microsoft\Windows\Start Menu\Programs\ hat bei mir einen Fehler ausgelöst (ev fehlende Zugriffsrechte), deshalb habe ich den Shortcut auf dem Desktop abgelegt
Gruss