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-Key: 187253

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: SlainteMhath
SlainteMhath Jun 29, 2012 at 11:17:03 (UTC)
Goto Top
Moin,

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

lg,
Slainte
Member: DerWoWusste
DerWoWusste Jun 29, 2012 at 12:08:32 (UTC)
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.
Member: pieh-ejdsch
pieh-ejdsch Jun 29, 2012 updated at 20:59:20 (UTC)
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
Member: DerWoWusste
DerWoWusste Jun 29, 2012, updated at Jul 03, 2012 at 08:51:09 (UTC)
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.
Member: TsukiSan
TsukiSan Jun 29, 2012 at 15:57:11 (UTC)
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
Member: TBlinker
TBlinker Jun 29, 2012 at 17:18:50 (UTC)
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!
Member: Lochkartenstanzer
Lochkartenstanzer Jun 29, 2012 at 20:29:31 (UTC)
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
Member: pieh-ejdsch
pieh-ejdsch Jun 29, 2012 updated at 20:47:21 (UTC)
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
Member: TBlinker
TBlinker Jul 03, 2012 at 13:58:57 (UTC)
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 ...