Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Vergleiche den Inhalt von 3 Verzeichnisse anhand des geändert am Datums und lösche die nicht Übereinstimmungen

Frage Entwicklung Batch & Shell

Mitglied: christiankarl

christiankarl (Level 1) - Jetzt verbinden

15.05.2013 um 11:24 Uhr, 2328 Aufrufe, 11 Kommentare

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
Mitglied: Endoro
15.05.2013, aktualisiert um 11:34 Uhr
Hallo Christian,

es sollen nur Zeitstempel "geändert am" verglichen werden?
Wieviele Dateien liegen denn in den Verzeichnissen?

Es könnten also Dateien in allen drei Verzeichnissen gelöscht werden?

Gruss.
Bitte warten ..
Mitglied: christiankarl
15.05.2013 um 12:05 Uhr
Hallo Endoro,
Richtig, alle Dateien in allen Verzeichnissen sollen gegeneinander geprüft werden
und wo der Zeitstempel "geändert am" nicht identisch ist, sollen alle nicht Übereinstimmungen gelöscht werden.

In den jeweiligen Verzeichnissen können maximal 20 Dateien liegen.

Gruß
christian
Bitte warten ..
Mitglied: Endoro
15.05.2013, aktualisiert um 14:04 Uhr
Das ist eine witzige Aufgabe
.. deswegen muss ich noch mal über die Logik nachdenken.


Gruss!
Bitte warten ..
Mitglied: christiankarl
15.05.2013 um 15:17 Uhr
Dann bin ich doch mal auf das Ergebnis gespannt
Bitte warten ..
Mitglied: bastla
15.05.2013, aktualisiert um 16:29 Uhr
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:
01.
@echo off & setlocal 
02.
set "V1=D:\Ordner" 
03.
set "V2=D:\Anderer Ordner" 
04.
set "V3=D:\Ganz anderer Ordner" 
05.
set /a Anz=3 
06.
 
07.
for /L %%i in (1,1,%Anz%) do ( 
08.
    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 
09.
10.
 
11.
for /L %%i in (1,1,%Anz%) do ( 
12.
    call pushd "%%V%%i%%" 
13.
    call echo Bearbeite "%%V%%i%%" 
14.
    for /f "delims=" %%f in ('dir /b/a-d') do ( 
15.
        set OK=true 
16.
        for /L %%j in (1,1,%Anz%) do findstr /lc:"%%~tf" "%temp%\%%j.txt">nul||set "OK=" 
17.
        if not defined OK echo del %%f 
18.
19.
    popd 
20.
)
Wegen des "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 ...
Bitte warten ..
Mitglied: Endoro
15.05.2013, aktualisiert um 17:57 Uhr
Hmmm, ich hab noch überlegt: findstr und Tempdatei oder ... bastla war schlauer

01.
@echo off&setlocal 
02.
set "V1=Verzeichnis1" 
03.
set "V2=Verzeichnis2" 
04.
set "V3=Verzeichnis3" 
05.
 
06.
for %%i in ("%V1%" "%V2%" "%V3%") do ( 
07.
	pushd "%%~i" 
08.
	for %%j in (*) do for /f "tokens=1,2delims=:" %%a in ("%%~tj") do set "$%%~i|%%~j=%%a%%b"&set "#%%~i%%a%%b=%%a%%b" 
09.
	popd 
10.
11.
for %%i in ("%V1%" "%V2%" "%V3%") do for %%j in ("%V1%" "%V2%" "%V3%") do if "%%~i" neq "%%~j" ( 
12.
	for /f "tokens=1-3delims=$|=" %%a in ('set "$%%~i" 2^>nul') do ( 
13.
		setlocal enabledelayedexpansion 
14.
		set "test=!#%%~j%%~c!"  
15.
		if not defined test ( 
16.
			endlocal 
17.
			echo del "%%a\%%b" 
18.
			set "$%%~a|%%~b=" 
19.
		) else endlocal 
20.
21.
)
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!
Bitte warten ..
Mitglied: christiankarl
16.05.2013 um 10:50 Uhr
Hallo, ich danke euch beiden für die Hilfe,

eine kleine änderungsanfrage habe ich da aber noch:

besteht die Möglichkeit, bevor die Dateien gelöscht werden, das diese in ein "archiv" zu kopieren,
oder anstatt zu löschen, direkt in ein Archiv zu verschieben

01.
  
02.
 
03.
set "V1=D:\Ordner"  
04.
set "V2=D:\Anderer Ordner"  
05.
set "V3=D:\Ganz anderer Ordner"  
06.
 
07.
set "A1=D:\Ordner Archiv" 
08.
set "A2=D:\Anderer Ordner Archiv"  
09.
set "A3=D:\Ganz anderer Ordner Archiv"  
10.
 
Bitte warten ..
Mitglied: Endoro
16.05.2013 um 12:04 Uhr
Hallo christiankarl,

das kannst du eine Zeile über dem "del" Kommando einfügen

Gruss!
Bitte warten ..
Mitglied: christiankarl
16.05.2013, aktualisiert um 12:19 Uhr
Hallo Bastla,

nochmalig danke,

zu deiner Frage: Meinst Du "Datum" oder "Zeitstempel" (also inkl Uhrzeit)?


ich meine nur Datum, keine Uhrzeit

habe aber ein kleines Problem festgestellt:

z.b. Beispiel 1

Verzeichnis1 3 Dateien
12.05
06.05
03.05

Verzeichnis2 2 Dateien
07.05
09.05

Verzeichnis3 0 Dateien

Ergebnis erwartet = 0
Ergebnis erhalten, alle Dateien bleiben im Ordner


Beispiel 2

Verzeichnis1 2 Dateien
12.05
13.05

Verzeichnis2 1 Dateien
12.05

Verzeichnis3 1 Dateien
04.05

Ergebnis erwartet = 0
Ergebnis erhalten, alle Dateien bleiben im Ordner

Keines der Verzeichnisse hat ein Vorrang. Die Verzecihnisse sollen sozusagen Syncronisiert werden, sprich in allen Ordnern sollem immer nur die gleichen Dateien vom Datum her sein.

Vielleicht hilft es, dass in allen Dateien am Ende immer ein Zeitstempel mit im Dateinamen aufgeführt wird. z.b.
test1234_32423_test_20130416-1116171
Bitte warten ..
Mitglied: christiankarl
16.05.2013 um 12:18 Uhr
@ Endoro,
aber dann erfolgt doch noch keine durchführung der archivierung oder?
Bitte warten ..
Mitglied: Endoro
16.05.2013 um 20:34 Uhr
Hallo christiankarl,

du kannst den Dateinamen vor dem Löschen abgreifen und die Dateien mit einem Packer deiner Wahl archivieren. Der Rest ist ja sonst erledigt

Gruss!
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...