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:
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!^^
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!^^
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
9 Kommentare
Neuester Kommentar
@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
)
-tante edit- kleine Korrekturen
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:
Der Rest sollte klar sein, Vergleich von Datum -> Wenn gleich -> Script Ende / Wenn nicht gleich > Starte Installation.
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
Hab die Änderungen oben eingepflegt, also einfach das ganze Script nochmal kopieren ...
Nur falls du am Ende noch weiteren Code parkst, springt dieser Befehl direkt zum absoluten Ende der Batch ... Macht der Gewohnheit