kaymanhey
Goto Top

Batch Datei soll Erstelldatum einer Datei abfragen und nur dann eine Installation starten

Hallo Administratoren,

ich habe mich nun hier registriert weil ich mit meinem Problem nicht mehr wirklich weiterkomme.
Libre Office kennt ja jeder, es hat keine Updatefunktion, also muss man sich selbst kümmern.
In meinem Unternehmen habe ich also eine Batch Datei geschrieben, die dafür sorgen soll, dass das Update ausgeführt wird, wenn eine neue Version vorhanden ist.

Die "neuere" Installationsdatei wird von mir auf einen internen Server gepackt und die "ältere" Installationsdatei wird als Referenz auf dem System belassen. Die Ordnerstrukturen lassen sich im Code ersehen.

Nun habe ich mehrere Probleme. Zuerst einmal der Code:

@echo off &setlocal 

for /f "tokens=1-3*" %%i in ('dir /a-d /tc "\\OrdnerPfad_auf_Server\LibreOffice_Install.msi"^|findstr /vbc:" "') do (   
  set "fdate=%%i"   
  set "ftime=%%j"   
  set "fname=%%l"   
  setlocal EnableDelayedExpansion 
    echo Server-Datei: !fname! 
    echo Erstellt: !fdate! !ftime! 
    echo -------------------------------------------- 
  endlocal 
) 

if exist "C:\ProgramData\Lib_Office_Install\LibreOffice_Install.msi" for /f "tokens=1-3*" %%i in ('dir /a-d /tc "C:\ProgramData\Lib_Office_Install\LibreOffice_Install.msi"^|findstr /vbc:" "') do (   
  set "fdate1=%%i"   
  set "ftime2=%%j"   
  set "fname3=%%l"   
  setlocal EnableDelayedExpansion 
    echo Local-Datei: !fname3! 
    echo Erstellt: !fdate1! !ftime2! 
    echo -------------------------------------------- 
  endlocal 
) 

if %fdate% NEQ %fdate1% set /a "variable=1"  

if %fdate% NEQ %fdate1% echo neue Datei verfuegbar
if %fdate% EQU %fdate1% echo ist aktuell

if %variable% EQU 1 echo Installation beginnt

if %fdate% NEQ %fdate1% msiexec /package "\\OrdnerPfad_auf_Serverl\LibreOffice_Install.msi" /passive  

if exist del "C:\ProgramData\Lib_Office_Install\LibreOffice_Install_Alt.msi"  
if %variable% EQU 1 ren "C:\ProgramData\Lib_Office_Install\LibreOffice_Install.msi" LibreOffice_Install_Alt.msi  
if %variable% EQU 1 xcopy \\OrdnerPfad_auf_Server\ C:\ProgramData\Lib_Office_Install\


1. Problem: Mit dem Ordner-Pfad hinter "if exist" in der zweiten Erstelldatumabfrage stürzt das Programm sofort ab, obwohl die Syntax ja eigentlich so sein sollte.
2. Problem: Ohne den Ordner-Pfad, gibt er mir nur %%i und die anderen Variablen als Name aus anstatt das richtige Datum.
3. Problem: Irgendwann hat das Auslesen der Erstelldaten korrekt funktioniert, trotzdem funktionierten die Vergleichsoperatoren nicht so wie ich es mir gedacht hatte - soll heißen, wenn ich gesagt habe: Wenn Erstelldatum der Server-Datei größer als Erstelldatum der Lokalen Datei ist, installiere. Allerdings wird die Installation trotzdem IMMER ausgeführt.

Zudem wirft er mir beim Herumprobieren scheinbar willkürlich Syntaxfehler um die Ohren die gar nicht falsch sein können: set /a "variable=1" befehl wurde wahrscheinlich falsch geschrieben. So in der Art.

Bitte helft mir!^^

Content-ID: 272533

Url: https://administrator.de/forum/batch-datei-soll-erstelldatum-einer-datei-abfragen-und-nur-dann-eine-installation-starten-272533.html

Ausgedruckt am: 23.12.2024 um 07:12 Uhr

114757
Lösung 114757 21.05.2015 aktualisiert um 12:06:23 Uhr
Goto Top
@echo off & setlocal enabledelayedexpansion
set "pathlocal=C:\ProgramData\Lib_Office_Install\LibreOffice_Install.msi"  
set "pathremote=\\OrdnerPfad_auf_Server\LibreOffice_Install.msi"  

for %%i in ("%pathremote%") do (   
  set "fdate_server=%%~ti"   
) 

if exist "%pathlocal%" (  
  for %%i in ("%pathlocal%") do (   
    set "fdate_local=%%~ti"  
  )
) 

if "!fdate_server!" NEQ "!fdate_local!" (  
    echo Neuer Installer verfuegbar !
    echo Installation wird gestartet ...
    msiexec /package "%pathremote%" /passive  
    if exist "C:\ProgramData\Lib_Office_Install\LibreOffice_Install_Alt.msi" del "C:\ProgramData\Lib_Office_Install\LibreOffice_Install_Alt.msi"  
    ren "%pathlocal%" LibreOffice_Install_Alt.msi  
    xcopy \\LKV18\public\lib_office_install\ C:\ProgramData\Lib_Office_Install\
) else (
    echo Installation ist auf dem neuesten Stand
    goto :eof
)
Gruß jodel32

-tante edit- kleine Korrekturen
KayManHey
KayManHey 21.05.2015 um 11:29:02 Uhr
Goto Top
Hallöchen jodel32 und vielen Dank für Deine Mühe.
Ich habe den Code nun mit den Pfaden angepasst und eine neuere Installationsdatei zur Verfügung gestellt, leider funktioniert die Batch allerdings nicht.
Das cmd Fenster schließt sich sofort wieder ohne etwas anzuzeigen oder zu unternehmen... Ne Idee woran das liegen könnte?
Zudem wäre es nett, wenn Du mal kurz erklären könntest was du genau in der Variablenbenennung und den for-Schleifen machst.

Vielen lieben Dank und LG =)
114757
Lösung 114757 21.05.2015 aktualisiert um 12:06:26 Uhr
Goto Top
Kleinere Korrekturen ... sorry
Und für solche Sachen das Script in einer bereits geöffneten CMD ausführen dann siehst du auch eventuelle Fehler !
Zur Info was das hier bedeutet:
%%~ti        - erstellt Datum und Zeit von der Datei
Der Rest sollte klar sein, Vergleich von Datum -> Wenn gleich -> Script Ende / Wenn nicht gleich > Starte Installation.
KayManHey
KayManHey 21.05.2015 um 11:38:13 Uhr
Goto Top
Öh, vielen Dank, aber an welche Stelle muss das genau?
114757
Lösung 114757 21.05.2015 aktualisiert um 12:06:30 Uhr
Goto Top
Zitat von @KayManHey:
Öh, vielen Dank, aber an welche Stelle muss das genau?
Hab die Änderungen oben eingepflegt, also einfach das ganze Script nochmal kopieren ...
KayManHey
KayManHey 21.05.2015 um 12:06:17 Uhr
Goto Top
Yeah, du bist mein Held =)
Vielen Dank =)
Kurze Frage noch, was bezweckst du mit goto :eof?
114757
114757 21.05.2015 aktualisiert um 12:19:26 Uhr
Goto Top
Zitat von @KayManHey:
Kurze Frage noch, was bezweckst du mit goto :eof?
Nur falls du am Ende noch weiteren Code parkst, springt dieser Befehl direkt zum absoluten Ende der Batch ... Macht der Gewohnheit face-wink
KayManHey
KayManHey 21.05.2015 um 12:19:53 Uhr
Goto Top
Aja okay... end of file also^^
Vielen lieben Dank nochmal =)
KayManHey
KayManHey 27.05.2015 aktualisiert um 11:19:42 Uhr
Goto Top
Aus irgendeinem Grund schmeißt er mir neuerdings folgende Meldung raus:

")" kann an dieser stelle syntaktisch nicht verarbeitet werden

Warum??
Hier nochmal der Code

TITLE BITTE NICHT SCHLIESSEN!
@echo off & setlocal enabledelayedexpansion

echo -------------------------------------------- 

set "pathlocal=C:\ProgramData\Lib_Office_Install\LibreOffice_Install.msi"  
set "pathremote=\\Server\public\lib_office_install\LibreOffice_Install.msi"  

if not exist C:\ProgramData\Lib_Office_Install mkdir C:\ProgramData\Lib_Office_Install

for %%i in ("%pathremote%") do (   
  set "fdate_server=%%~ti"   
) 

if exist "%pathlocal%" (  
  for %%i in ("%pathlocal%") do (   
    set "fdate_local=%%~ti"  
  )
) 

if "!fdate_server!" NEQ "!fdate_local!" (  
    echo Neuer Installer verfuegbar !
    echo Installation wird gestartet ...
    msiexec /package "%pathremote%" /passive  
    if exist "C:\ProgramData\Lib_Office_Install\LibreOffice_Install_Alt.msi" del "C:\ProgramData\Lib_Office_Install\LibreOffice_Install_Alt.msi"  
	xcopy \\Server\lib_office_install\LibreOffice_Install.msi C:\ProgramData\Lib_Office_Install\
::    ren "%pathlocal%" LibreOffice_Install_Alt.msi     
) else (
    echo Installation ist auf dem neuesten Stand
    goto :eof
)


Update:
Ich habe nun zwischendrin "echo test<nummer>" geschrieben...
Plötzlich funktioniert es wieder oO