Vergleiche den Inhalt von 3 Verzeichnisse anhand des geändert am Datums und lösche die nicht Übereinstimmungen
Hallo,
leider kenne ich mich in Scripten nicht wirklich aus.
Ich habe folgendes Problem, welches ich gerne per VBS/Batch Script lösen möchte:
in 3 verschieden Verzeichnissen kann es vorkommen, dass Dateien von unterschiedlichen Tagen liegen, der Dateiname selber spielt keine Rolle.
Nun möchte ich folgendes herausfinden:
Vergleiche den Inhalt der 3 Verzeichnisse anhand des „geändert am“ Datums und lösche alle Dateien, welche nicht identisch sind.
3 Zeitstempel -> OK
1 oder 2 Zeitstempel nicht vorhanden, lösche entsprechende vorhandene Datei(en)
Besteht hier überhaupt die Möglichkeit eines solchen Vergleiches, wenn ja wie müsste eine solche Datei aussehen?
Gruß
Christian
leider kenne ich mich in Scripten nicht wirklich aus.
Ich habe folgendes Problem, welches ich gerne per VBS/Batch Script lösen möchte:
in 3 verschieden Verzeichnissen kann es vorkommen, dass Dateien von unterschiedlichen Tagen liegen, der Dateiname selber spielt keine Rolle.
Nun möchte ich folgendes herausfinden:
Vergleiche den Inhalt der 3 Verzeichnisse anhand des „geändert am“ Datums und lösche alle Dateien, welche nicht identisch sind.
3 Zeitstempel -> OK
1 oder 2 Zeitstempel nicht vorhanden, lösche entsprechende vorhandene Datei(en)
Besteht hier überhaupt die Möglichkeit eines solchen Vergleiches, wenn ja wie müsste eine solche Datei aussehen?
Gruß
Christian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206499
Url: https://administrator.de/forum/vergleiche-den-inhalt-von-3-verzeichnisse-anhand-des-geaendert-am-datums-und-loesche-die-nicht-206499.html
Ausgedruckt am: 07.05.2025 um 23:05 Uhr
11 Kommentare
Neuester Kommentar
Hallo christiankarl!
Meinst Du "Datum" oder "Zeitstempel" (also inkl Uhrzeit)?
Der Dateiname soll ja keine Role spielen - genügt es daher, wenn (zumindest) eine beliebig benannte Datei aus jedem der beiden anderen Ordner das gleiche Änderungsdatum aufweist?
Falls sowohl Datum als auch Uhrzeit in den Vergleich einbezogen werden soll und die Antwort auf die zweite Frage "ja" lautet, könnte das etwa so gehen:
Wegen des "
Grüße
bastla
P.S.: Da es sich nur um wenige Dateien handelt, dürfte das Vergleichen mit allen 3 Ordnern anstatt nur mit den beiden anderen performancemäßig zu verschmerzen sein ...
Meinst Du "Datum" oder "Zeitstempel" (also inkl Uhrzeit)?
Der Dateiname soll ja keine Role spielen - genügt es daher, wenn (zumindest) eine beliebig benannte Datei aus jedem der beiden anderen Ordner das gleiche Änderungsdatum aufweist?
Falls sowohl Datum als auch Uhrzeit in den Vergleich einbezogen werden soll und die Antwort auf die zweite Frage "ja" lautet, könnte das etwa so gehen:
@echo off & setlocal
set "V1=D:\Ordner"
set "V2=D:\Anderer Ordner"
set "V3=D:\Ganz anderer Ordner"
set /a Anz=3
for /L %%i in (1,1,%Anz%) do (
for /f "tokens=1-2" %%a in ('call dir /a-d "%%V%%i%%"^|findstr /b "[0-3][0-9]\.[0-1][0-9]\."') do >>%temp%\%%i.txt echo %%a %%b
)
for /L %%i in (1,1,%Anz%) do (
call pushd "%%V%%i%%"
call echo Bearbeite "%%V%%i%%"
for /f "delims=" %%f in ('dir /b/a-d') do (
set OK=true
for /L %%j in (1,1,%Anz%) do findstr /lc:"%%~tf" "%temp%\%%j.txt">nul||set "OK="
if not defined OK echo del %%f
)
popd
)
echo
" vor "del
" in Zeile 17 läuft der Batch im "Demo"-Modus - es werden die Löschbefehle nur angezeigt, aber nicht ausgeführt ..Grüße
bastla
P.S.: Da es sich nur um wenige Dateien handelt, dürfte das Vergleichen mit allen 3 Ordnern anstatt nur mit den beiden anderen performancemäßig zu verschmerzen sein ...
Hmmm, ich hab noch überlegt: findstr und Tempdatei oder ... bastla war schlauer 
Wenn im Verzeichnis oder Dateinamen "
(Batch halt).
Gruss!
@echo off&setlocal
set "V1=Verzeichnis1"
set "V2=Verzeichnis2"
set "V3=Verzeichnis3"
for %%i in ("%V1%" "%V2%" "%V3%") do (
pushd "%%~i"
for %%j in (*) do for /f "tokens=1,2delims=:" %%a in ("%%~tj") do set "$%%~i|%%~j=%%a%%b"&set "#%%~i%%a%%b=%%a%%b"
popd
)
for %%i in ("%V1%" "%V2%" "%V3%") do for %%j in ("%V1%" "%V2%" "%V3%") do if "%%~i" neq "%%~j" (
for /f "tokens=1-3delims=$|=" %%a in ('set "$%%~i" 2^>nul') do (
setlocal enabledelayedexpansion
set "test=!#%%~j%%~c!"
if not defined test (
endlocal
echo del "%%a\%%b"
set "$%%~a|%%~b="
) else endlocal
)
)
Wenn im Verzeichnis oder Dateinamen "
=
" oder ":
" sind, geht der Code nicht. Die Verzeichnisse können also nur ohne Laufwerk angegeben werden (also zB "\user\dokumente"
), warum das so ist konnte ich nicht rausfinden Gruss!