hovawart
Goto Top

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

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

Content-ID: 320786

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

131381
131381 13.11.2016 um 13:52:09 Uhr
Goto Top
Der Einzeiler nennt sich robocopy face-smile
robocopy "c:\db" "F:\backup\db" database.gdb /xo /r:2 /w:5  
Gruß
Hovawart
Hovawart 16.11.2016 um 09:57:41 Uhr
Goto Top
Sorry, es fehlte eine wichtige Info bzw. ich hatte mit unklar ausgedrückt. Ich vergaß deutlich zu machen, dass die Sicherungsdateien sich vom Original durch Datum-Uhrzeit im Dateinamen unterscheiden! (Original: database.gdb, Sicherungskopien, z.B.: 2016-11-06_22-12_database.gdb, ...).
Damit kommt robocopy nicht klar ...
131381
131381 16.11.2016 aktualisiert um 10:30:06 Uhr
Goto Top
Ich würde für sowas sowieso inzwischen Powershell nehmen, da ist das ebenfalls ein Oneliner.
Hovawart
Hovawart 26.11.2016 um 10:34:36 Uhr
Goto Top
Das war nicht die Frage ...
131381
131381 26.11.2016 aktualisiert um 14:08:06 Uhr
Goto Top
Zitat von @Hovawart:
Das war nicht die Frage ...
Da war überhaupt keine Frage face-smile

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.