Jüngste Datei suchen und Datum sowie Uhrzeit des letzten Zugriffs auslesen
Hallo,
habe hier eine Prüfroutine, die den Zeitstempel des letzten Zugriffs einer gegebenen Datenbankdatei mit dem Zeitstempel der letzten/neuesten Kopie dieser Datenbankdatei in einem Backup-Verzeichnis vergleicht.
Das "zweistufige" Ermitteln der jüngsten Zieldatei und ihres Zeitstempels funktioniert zwar, kommt mir so aber ziemlich "hölzern" vor!
Hat vielleicht jemand eine Idee, wie man das eleganter in einem Einzeiler lösen kann?
Ich bin daran kläglich gescheitert ...
Ziel dieser Routine ist es, nur dann (zeitgesteuert) einen weiteren Backup der Datenbankdatei auszulösen, wenn der jüngste Backup einen älteren Zeitstempel hat.
Edit: Die Sicherungsdateien unterscheiden sich vom Original durch Datum-Uhrzeit im Dateinamen! (Original: database.gdb, Sicherungskopien, z.B.: 2016-11-06_22-12_database.gdb, ...).
Grüße, Hovawart
habe hier eine Prüfroutine, die den Zeitstempel des letzten Zugriffs einer gegebenen Datenbankdatei mit dem Zeitstempel der letzten/neuesten Kopie dieser Datenbankdatei in einem Backup-Verzeichnis vergleicht.
Das "zweistufige" Ermitteln der jüngsten Zieldatei und ihres Zeitstempels funktioniert zwar, kommt mir so aber ziemlich "hölzern" vor!
Hat vielleicht jemand eine Idee, wie man das eleganter in einem Einzeiler lösen kann?
Ich bin daran kläglich gescheitert ...
Ziel dieser Routine ist es, nur dann (zeitgesteuert) einen weiteren Backup der Datenbankdatei auszulösen, wenn der jüngste Backup einen älteren Zeitstempel hat.
Edit: Die Sicherungsdateien unterscheiden sich vom Original durch Datum-Uhrzeit im Dateinamen! (Original: database.gdb, Sicherungskopien, z.B.: 2016-11-06_22-12_database.gdb, ...).
Grüße, Hovawart
set quelle=C:\db
set ziel=f:\backup\db
set db=database.gdb
::::::::::::::::::::::::::::
:: Prüfen, ob Quelldatei und Zieldatei unterschiedliche Zeitstempel haben, wenn nicht, keine Sicherung erforderlich.
::::::::::::::::::::::::::::
:: Zeitstempel der Quelldatei ermitteln
::::::::::::::::::::::::::::
for /f "tokens=1-2 delims= " %%a in ('dir %quelle%\%db% /t:w^|findstr /i /l "%db%"') do set lastaccess_quelldatei=%%a_%%b
::::::::::::::::::::::::::::
:: Jüngste der Zieldateien ermitteln
::::::::::::::::::::::::::::
for /f "delims=" %%a in ('dir /b /a-d /o %ziel%') do set "zieldatei=%%a"
::::::::::::::::::::::::::::
:: Datums-/Zeitstempel des Zugriffs der jüngsten/letzten Datei ermitteln
::::::::::::::::::::::::::::
for /f "tokens=1-2 delims= " %%a in ('dir %ziel%\*.* /t:w^|findstr /i /l "%zieldatei%"') do set lastaccess_zieldatei=%%a_%%b
::::::::::::::::::::::::::::
:: Vergleich der Datums-/Zeitstempel auswerten, Abbruch bei Gleichheit, weiter bei Ungleichheit
::::::::::::::::::::::::::::
echo %lastaccess_quelldatei%
echo %lastaccess_zieldatei%
timeout /t 15
if %lastaccess_quelldatei% equ %lastaccess_zieldatei% goto :no_action
:::::::::::::::::::::::::::::
:: Kopier-Routine
:::::::::::::::::::::::::::::
:copy_file
...
:::::::::::::::::::::::::::::
:: Abbruch ...
:::::::::::::::::::::::::::::
:no_action
exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 320786
Url: https://administrator.de/contentid/320786
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
5 Kommentare
Neuester Kommentar
Der Einzeiler nennt sich robocopy
Gruß
robocopy "c:\db" "F:\backup\db" database.gdb /xo /r:2 /w:5
Ich würde für sowas sowieso inzwischen Powershell nehmen, da ist das ebenfalls ein Oneliner.
Da war überhaupt keine Frage
Wenn du kein PS willst, dann sortier die Files anhan des Namens mit sort oder über die FOR-Schleife.
Viel kürzer oder übersichtlicher bekommst du das mit Batch nicht. Batch ist sowieso Schnee von gestern.
Wenn du kein PS willst, dann sortier die Files anhan des Namens mit sort oder über die FOR-Schleife.
Viel kürzer oder übersichtlicher bekommst du das mit Batch nicht. Batch ist sowieso Schnee von gestern.