tkline
Goto Top

Javaversion mit Batch vergleichen und Übergabe Variable an VBScript

Hallo Leute,

Hab mal wieder ein Spezialfall für euch Profis face-smile

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 face-sad

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

wscript //NOLOGO //B C:\javawimb\WSC.vbs "%JVersion%" 
Das VBScript dazu lautet:

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 face-smile

Grüße
Tom

Content-ID: 361900

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

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

Meierjo
Lösung Meierjo 21.01.2018 um 19:30:00 Uhr
Goto Top
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):
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
tkline
tkline 21.01.2018 um 20:42:03 Uhr
Goto Top
Dank Dir Meierjo,
durch deinen Denkanstoss können wir 1 und 2 als erledigt betrachten.
Habe es auch so umgesetzt -- Gestet und funktioniert!
if not exist %appdata%\%JVersion%\wing.properties goto ... robocopy_kopierjob .... else end!  
:robocopy_kopierjob

:end

Zu 3:
In Richtung Umgebungsvariablen habe ich auch gedacht. Den Pfad dann auch so eingetragen, aber leider bekomme ich nur die Fehlermeldung "A Java Exception has occured" und jni error. Das funktioniert leider mit der Breadcrumb Software nicht, deshalb muss ich den vollständigen Pfad eintragen, wie im VBSkript in Zeile 4
Meierjo
Lösung Meierjo 22.01.2018 um 09:26:19 Uhr
Goto Top
Hallo

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
tkline
tkline 22.01.2018 um 09:59:58 Uhr
Goto Top
Hallo,

Ich habe einfach die Variable im Shortcut falsch eingetragen face-sad
Dank deinem Tipp funktioniert es jetzt. Ich habe es abgekürzt und folgendes in VBS eingetragen und jetzt funktioniert alles..

Set sh = CreateObject("WScript.Shell")  
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")   
shortcut.TargetPath = "C:\Program Files (x86)\Java\" & JVersion & "\bin\javaw.exe"   
shortcut.Save

Tausend Dank meierjo für deinen Einsatz und tolle Unterstützung!
Du hast meinen Tag gerettet!!! face-smile

Viele Grüße

Tom