streuner1
Goto Top

Batch vergleiche Dateien mit Zeitstempel

Hallo,

ich möchte mit einer batch in einem Ordner Dateien mit einem Zeitstempel suchen, vergleichen, kopieren und löschen.
Möglichkeiten: es gibt keine Datei mit Zeitstempel oder 1, 2, ...
Dateinamen:
Test_MMTT_HHMMSS
Hier ein Beispiel.
Es gibt 4 Dateien mit den Namen:
Test_0311_141322
Test_0311_161530
Test_0312_040309
Test_0401_124759
Nun soll die aktuellste Datei (Test_0401_124759) kopiert werden (Test_aktuell) und danach alle 4 Dateien löschen.

Gruß
Streuner1

Content-Key: 300095

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

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: bastla
Lösung bastla 25.03.2016 um 12:26:27 Uhr
Goto Top
Hallo Streuner1 und willkommen im Forum!

Schematisch als Batch etwa so:
@echo off & setlocal
set "Ordner=D:\Dein Ordner"  
set "Dateien=Test_*_*"  
set "Ziel=Test_aktuell"  

set "Neueste="  
for /f "delims=" %%i in ('dir /b /on /a-d "%Ordner%\%Dateien%" 2^>nul') do set "Neueste=%%i"  
echo copy "%Ordner%\%Neueste%" "%Ordner%\%Ziel%" && echo del "%Ordner%\%Dateien%"  
pause
Da Du nicht angibst, in welchen Ordner die neueste Datei als "Test_aktuell" kopiert werden soll, wird diese im gleichen Ordner (siehe Zeile 2) wie die Ausgangadateien erstellt; zu beachten ist, dass ihr Name nicht dem Namensschema der anderen Dateien (siehe Zeile 3) entsprechen darf, da sie ansonsten ebenfalls gelöscht würde ...

Solange die beiden echo in der Zeile 8 stehen, werden der Kopier- bzw Lösch-Befehl nur angezeigt, aber noch nicht ausgeführt - wenn alles ok aussieht kannst Du diese echo (und auch die Zeile 9) löschen und damit den Batch "scharf schalten" .

Grüße
bastla
Mitglied: Streuner1
Streuner1 25.03.2016 um 14:19:51 Uhr
Goto Top
Hallo bastla,

sieht sehr gut aus. Wen ich den Code so ändere dann löscht er die aktuelle Datei im gleichen Ordner auch nicht.
@echo off & setlocal 

set "Ordner=E:\Test\Dat1"   
set "Dateien=Test_*_*.txt"   
set "Ziel=Test_aktuell.txt"   
set "Neueste="   

for /f "delims=" %%i in ('dir /b /on /a-d "%Ordner%\%Dateien%" 2^>nul') do set "Neueste=%%i"   

copy "%Ordner%\%Neueste%" "%Ordner%\%Ziel%" && del "%Ordner%\%Dateien%"  
Nun habe ich noch eine Frage.
Wenn gar keine Dateien vorhanden sind dann schreibt er mir in der "Test_aktuell.txt" am Ende immer ein Kästchen rein.
Könnte man die Abfrage so bauen? Wenn keine Datei vorhanden, dann mach nichts.

Vielen DANK schon mal.

Gruß
Streuner1
Mitglied: Streuner1
Streuner1 25.03.2016 um 14:39:04 Uhr
Goto Top
Hallo bastla,

ich habe es so gelöst. Funktioniert. face-smile
@echo off & setlocal 

set "Ordner=E:\Test\Dat1"    
set "Dateien=Test_*_*.txt"   
set "Ziel=Test_aktuell.txt"   
set "Neueste="   

if not exist %Ordner%\%Dateien% goto end
if exist %Ordner%\%Dateien% goto start else goto end

:start
for /f "delims=" %%i in ('dir /b /on /a-d "%Ordner%\%Dateien%" 2^>nul') do set "Neueste=%%i"   

copy "%Ordner%\%Neueste%" "%Ordner%\%Ziel%" && del "%Ordner%\%Dateien%"  

:end
Vielen DANK bastla.

Gruß
Streuner1
Mitglied: Streuner1
Streuner1 25.03.2016 um 15:18:31 Uhr
Goto Top
Hallo,

noch eine Korrektur.
@echo off & setlocal 

set "Ordner=E:\Test\Dat1"    
set "Dateien=Test_*_*.txt"   
set "Ziel=Test_aktuell.txt"   
set "Neueste="   

if not exist %Ordner%\%Dateien% goto end

for /f "delims=" %%i in ('dir /b /on /a-d "%Ordner%\%Dateien%" 2^>nul') do set "Neueste=%%i"   
copy "%Ordner%\%Neueste%" "%Ordner%\%Ziel%" && del "%Ordner%\%Dateien%"  

:end
Gruß
Streuner1
Mitglied: bastla
bastla 25.03.2016 um 15:46:38 Uhr
Goto Top
Hallo Streuner1!

Noch etwas kompakter wird es, wenn Du die Zeile 8 auf
if not exist "%Ordner%\%Dateien%" goto :eof 
abänderst - dann brauchst Du die Zeile 13 nicht mehr ...

Grüße
bastla