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-Key: 320786

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

Printed on: April 26, 2024 at 10:04 o'clock

Mitglied: 131381
131381 Nov 13, 2016 at 12:52:09 (UTC)
Goto Top
Der Einzeiler nennt sich robocopy face-smile
robocopy "c:\db" "F:\backup\db" database.gdb /xo /r:2 /w:5  
Gruß
Member: Hovawart
Hovawart Nov 16, 2016 at 08:57:41 (UTC)
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 ...
Mitglied: 131381
131381 Nov 16, 2016 updated at 09:30:06 (UTC)
Goto Top
Ich würde für sowas sowieso inzwischen Powershell nehmen, da ist das ebenfalls ein Oneliner.
Member: Hovawart
Hovawart Nov 26, 2016 at 09:34:36 (UTC)
Goto Top
Das war nicht die Frage ...
Mitglied: 131381
131381 Nov 26, 2016 updated at 13:08:06 (UTC)
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.