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
Please also mark the comments that contributed to the solution of the article
Content-Key: 206499
Url: https://administrator.de/contentid/206499
Printed on: April 24, 2024 at 01:04 o'clock
11 Comments
Latest comment
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 "
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 (Batch halt).Gruss!