tblinker
Goto Top

Alle Unterordner mit Dateien älter 200x löschen

Ich möchte in einer recht verzweigten Ordnerstruktur alle Unterordner löschen, in denen alle enthaltenen Dateien älter als zb. 2007 sind (unser Netzlaufwerk soll mal aufgeräumt werden).

Ist das DOS Kommandos möglich (oder kennt gar jemand ein Tool dass das leistet)?


Vielen Dank

Content-ID: 187253

Url: https://administrator.de/forum/alle-unterordner-mit-dateien-aelter-200x-loeschen-187253.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

SlainteMhath
SlainteMhath 29.06.2012 um 13:17:03 Uhr
Goto Top
Moin,

schau mal hier: http://www.horstmuc.de/wbat32d.htm (via google in 10 sec face-smile )

lg,
Slainte
DerWoWusste
DerWoWusste 29.06.2012 um 14:08:32 Uhr
Goto Top
Als "DOS-Kommando" (ist kein DOS, sondern ein Kommandozeilentool) gibt es seit Vista/Server2008 eingebaut forfiles.exe dafür. In der Syntax findest Du @isdir, um mit Ordnern umzuspringen.
pieh-ejdsch
pieh-ejdsch 29.06.2012 aktualisiert um 22:59:20 Uhr
Goto Top
moin,

wie soll den forfiles die Ordner rausfinden, welche auch Jüngere und die alten Dateien hat?
Damit kenne ich mich aber zuwenig aus.

@echo off
setlocal
set "Ordner=\\server\freigabe\"  
 rem MM-TT-JJJJ
set "BehalteAb=01-01-2007"  
 rem Laufwerk muss existent sein Ordner darf nicht.
set "TestcopyNach=D:\TEST\"  

 rem Ende Einstellungen
set "Alle=%temp%\Alleliste.lst"  
set T="%temp%\alltmp.lst"  
set "del=%temp%\del.lst"  

 rem Liste mit Unterordnern wird erzeugt.
(for /d /r "%Ordner%" %%i in (*) do @echo %%i\\)> "%Alle%"  

 rem Vergleich mit einer Liste welche neuere Dateien enthalten wuerde
 rem Rest kommt in Vorruebergehende Loeschliste
(for /f delims^= %%i in ('xcopy /l /s /D:%BehalteAb% "%ordner%*.*" "%TestcopyNach%"') do @find /v "%%~dpi\" "%Alle%") >%T%  

 rem Liste wird auf Rueckwarts sortiert nach Loeschliste
sort /r %t% > "%del%"  

 rem Odner der Löschliste werden auf eventuelle Unterordner welche neue Dateien enthalten geprueft oder geloescht
for /f usebackQdelims^= %%i in ("%del%") do dir /ad /b /s |find /v "" >nul || @echo rd /s "%%~fi"  

[Edit]
Kommentare eingefügt
[/Edit]

Gruß Phil
DerWoWusste
DerWoWusste 29.06.2012, aktualisiert am 03.07.2012 um 10:51:09 Uhr
Goto Top
Moin Phil.
Beispielsweise so (für 7 Tage):
attrib -s -h c:\Test\*.* /D /S
forfiles /p c:\Test /d -7 /c "cmd /c del @file /q" /s  
forfiles /p c:\Test /c "cmd /c if @isdir==TRUE rd @file /q" /s  

Das haut natürlich auch Dateien in Ordnern weg, in denen auch neuere Dateien liegen - Du hast Recht, könnte unerwünscht sein.
TsukiSan
TsukiSan 29.06.2012 um 17:57:11 Uhr
Goto Top
Hallo TBlinker,

so wie es unsere Vorredner schon auf den Punkt gebracht haben und wie dein Wunsch ist, ist es momentan schwer, auf Ordnerbasis ganze Ordner zu löschen.
Wenn sich jüngere Dateien in einem Ordner befinden, welcher hauptsächlich "alte" Dateien beinhaltet, dann wird er ja nie gelöscht (bezugnehment auf deine Frage!)

Also, wie soll man sich das ganze vorstellen? Es gibt Ordner - meinetwegen auch Unterordner - die beinhalten Dateien. Wenn ein Jahr/Monat/Woche/Tag abgeschlossen ist/sind kommen dann noch neue Dateien dazu irgendwann mal?
Einfacher wird's wenn ein Ordner gelöscht werden soll, der mindestens eine Datei älteren Types (was vorher definiert wird!) beinhaltet. Aber dann wären ja auch neuere Dateien futsch.

Also Du siehst, deine Aufgabenstellung wirft Fragen auf. Realisieren lässt sich viel. Man muss es nur ganz klar definieren. Sonst geht's in die BadeHose face-wink

Gruss
Tsuki
TBlinker
TBlinker 29.06.2012 um 19:18:50 Uhr
Goto Top
Hallo!


Sorry für die Kurzfassung, hier mal der (leicht vereinfachte) Hintergrund:

Wir haben ein paar Dutzend Projekte, die jeweils in einem Ordner abgelegt sind. Um Aufzuräumen/Speicherplatz zu sparen sollen alle Ordner in denen seit X Jahren nichts mehr passiert ist gelöscht werden. Also nur diejenigen, in denen alle Dateien älter als X sind.

Es gibt viele Ordner, in den aktuelle Dateien neben uralten Liegen (irgendwelche thematisch zugehörigen Grundlagendokumente zb.) diese sollen erhalten bleiben.


Ich hätte gar nicht gedacht, dass es so kompliziert ist, aber dann bin ich hier ja genau richtig ;)


Danke für eure Mühe!
Lochkartenstanzer
Lochkartenstanzer 29.06.2012 um 22:29:31 Uhr
Goto Top
N'Abend,

Auf welchem filesystem liegen denn die Daten?

Bei soltle das schauen nach dem "last-modifired-Datum" zumindest ein wenig weiterhelfen. Wenn das last-modified mehrere Jahre zurückliegt, sollten da auch keine neueren Dateien liegen.

Ich würde für so tewas daher find aus dem fundus von cygwin nehmen. (find.exe gibt es auch standalone).

lks
pieh-ejdsch
pieh-ejdsch 29.06.2012 aktualisiert um 22:47:21 Uhr
Goto Top
Zitat von @TBlinker:
... Also nur diejenigen, in denen alle Dateien älter als X sind.
Es gibt viele Ordner, in den aktuelle Dateien neben uralten Liegen (irgendwelche thematisch zugehörigen Grundlagendokumente zb.) diese sollen erhalten bleiben.
genau das kannst Du mit Diesem Batch auch erstmal gefahrlos Testen,
weil @echo zeigt was es täte wenn es nicht mehr dasteht.

Gruß Phil
TBlinker
TBlinker 03.07.2012 um 15:58:57 Uhr
Goto Top
Zitat von @pieh-ejdsch:
genau das kannst Du mit Diesem Batch auch erstmal gefahrlos Testen,
weil @echo zeigt was es täte wenn es nicht mehr dasteht.

Gruß Phil

Konnte es heute nicht ausprobieren, gebe aber die nächsten Tage Rückmeldung ...