worlddiver
Goto Top

Veraltete Dateien aus spezifischen Unterverzeichnissen löschen

Hallo allerseits
Leider bin ich trotz intensiver Suche auf dem Web und auch auf dieser Seite noch nicht auf die richtige Lösung gestossen. Ich kann mir aber nicht vorstellen, dass ich der einzige bin, der vor diesem Problem steht.
Nun zähle ich auf eure Hilfe. face-smile

Aus einzelnen Unterverzeichnissen sollte ich automatisch Dateien löschen können, die älter als eine bestimmte Zeitspanne sind.
Ich habe z.B. folgende Verzeichnisstruktur:

D:
  \Hauptordner1
               \Ordner1                  (namens "Temp")
                       \Unterordner1
                       \Unterordner2
                       \UnterordnerN
               \Ordner2
                       \Unterordner1
                       \Unterordner2
                       \UnterordnerN
               \OrdnerN
                       \Unterordner1
                       \Unterordner2
                       \UnterordnerN
  \Hauptordner2
               \Ordner1                  (namens "Temp")
                       \Unterordner1
                       \Unterordner2
                       \UnterordnerN
               \Ordner2
                       \Unterordner1
                       \Unterordner2
                       \UnterordnerN
               \OrdnerN
                       \Unterordner1
                       \Unterordner2
                       \UnterordnerN
  \HauptordnerN

In der zweiten Ebene (Ordner) gibt es jeweils einen Ordner namens "Temp". IN diesem Temp-Ordner muss nun (in allen Unterordnern, die ganz unterschiedlich heissen können) nach Dateien mit einem bestimmten Namensmuster (z.B. Name*.zip und Name*.map) gesucht und DIE Dateien gelöscht werden, die älter als 10 Tage sind.

Die Crux an der Sache ist, das Namensmuster würde auch auf gleichnamige Dateien in Ordnern der zweiten Ebene greifen. Diese Dateien dürfen aber NICHT gelöscht werden. Weiter kommt hinzu, dass die Anzahl an "Hauptordner" (erste Ebene) und Unterordner (dritte Ebene) dynamisch wachsen kann.

Ich benötige also ein Script, welches automatisch in allen vorhandenen Hauptordnern nach dem Ordner "Temp" sucht und NUR dort die Dateien löscht, die dem Namensmuster entsprechen UND die älter sind als X Tage sind.


Ich hoffe, ich habe mich verständlich genug ausgedrückt und jemand von euch hier weiss mir einen Rat bzw. hat vielleicht gar ein fertiges Script!?


Schöne Grüsse aus der sonnigen Schweiz!

Content-Key: 189021

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

Printed on: April 26, 2024 at 23:04 o'clock

Member: Chris85
Chris85 Aug 02, 2012 at 12:59:55 (UTC)
Goto Top
Hi,

schau dir doch mal das Tool "Delage32" an. Das sollte deine Anforderungen erfüllen. Du musst dann nur noch ein kleines Script schreiben, welches Delage ausführt.

Über den Taskplaner kannst du den Aufruf dann auch automatisieren.

Gruß

Chris
Member: bastla
bastla Aug 02, 2012 updated at 13:09:32 (UTC)
Goto Top
Hallo Worlddiver und willkommen im Forum!

Zum Thema "Löschen alter Dateien" solltest Du ausreichend Hinweise (gerade auch hier im Forum finden), daher nur zum "Abklappern" der richtigen Ordner:
for /d %%i in ("D:\*") do for /d %%a in ("%%i\Temp\*") do echo Bearbeite "%%a"
bzw einfacher, wenn jeweils der gesamte "Temp"-Ordner inkl Unterordnern gemeint ist:
for /d %%i in ("D:\*") do if exist "%%i\Temp\" echo Bearbeite "%%i\Temp"
Grüße
bastla
Member: Worlddiver
Worlddiver Aug 02, 2012 at 14:22:06 (UTC)
Goto Top
Hallo Chris85 und bastla

Vielen Dank für eure schnellen Antworten.
Beides habe ich tatsächlich im Forum gefunden, konnte es aber nicht auf meine Bedürfnisse ummünzen.

So gelangte ich bei der Suche nach "Delage32" nur auf eine ungültige Website und ging davon aus, das Tool gibt's nicht mehr.
Und bastla's Lösung mit der doppelten Verschachtelung ist nun nochmals einen Schritt weiter, als was ich bereits gefunden hatte. Auf die Idee bin ich (leider) nicht gekommen.

Beides zusammen konnte ich nun auf meine Bedürfnisse anpassen.
So funktioniert nun genau, was ich wollte:

for /d %%i in (D:\Hauptordner\*) do for /d %%a in ("%%i\Temp\*") do delage32 "%%a\Name*.zip" 10

Bonusfrage:
Gäb's jetzt noch ne Möglichkeit, die ggf. dadurch entstandenen leeren Unterverzeichnisse zu entfernen?
Die Unterverzeichnisse können u.U. nochmals ein weiteres Unterverzeichnis enthalten. Sofern dieses auch leer ist, dürfen beide gelöscht werden.


Gruss
Worlddiver
Member: bastla
bastla Aug 02, 2012 at 19:06:23 (UTC)
Goto Top
Hallo Worlddiver!

Soferne alle unterhalb von "Temp" liegenden leeren Unterverzeichnisse gelöscht werden sollen, dann etwa so:
for /d %%i in (D:\Hauptordner\*) do for /f "delims=" %%u in('dir /s/b/ad "%%i\Temp"^|sort /r') do echo rd "%%u" 2>nul
Erklärung dazu: Es werden sämtliche Unterverzeichnisse mit "dir /s/b/ad" ermittelt und absteigend sortiert - damit werden zuerst die längsten Pfade (= am tieftsten in der Struktur liegenden Verzeichnisse) verarbeitet, wobei der Löschbefehl "rd" ohne Zusatz nur löscht, wenn das Verzeichnis leer ist; ansonsten würde die Meldung
Das Verzeichnis ist nicht leer.
ausgegeben, was aber durch Umleitung des Fehlerkanals nach "nul" unterbunden wird.

Damit Du Dir das zunächst einmal ansehen kannst, steht vor dem "rd" noch ein "echo", wodurch der Löschbefehl nur angezeigt wird ...

Grüße
bastla
Member: Worlddiver
Worlddiver Aug 03, 2012 at 06:15:02 (UTC)
Goto Top
Hallo bastla

Perfekt! Dein Script macht genau, was es soll.
Vielen Dank für die schnelle Hilfe!


Schöne Grüsse aus der Schweiz
Worlddiver