Bestimmte Ordner suchen, darin enthaltene Dateien, älter als 3 Tage löschen und anschließend leere Ordner löschen
Folgende Situation:
Auf einem Server werden durch verschiedene Benutzer in einem Ordner xyz Unterverzeichnisse angelegt.
Eine Applikation generiert dynamisch in diesem Ordner xyz jeweils in den User-Ordnern einen "2delete" Ordner.
Ich versuche nun eine Batch-Datei zu schreiben, die
1.) alle "2delete" Ordner sucht, und in ein LogFile schreibt
2.) Jeweils IN diesem "2delete" Ordner ALLE Dateien sucht, die älter als 3 Tage sind und diese dann löscht.
3.) Anschließend noch ALLE leeren Ordner innerhalb "2delete" löscht.
Meine Ansätz bisher:
Ansatz1 - FORFILES
set=log_delete.log
dir /b /s /a:d c:\application\user\ |find /i "2delete" >%log%
for /f %%a IN (%log%) DO FORFILES /p %%a /s /m *.* /d -3 /c "CMD /c del /q @File
Ansatz2 - delage32
set=log_delete.log
dir /b /s /a:d c:\application\user\ |find /i "2delete" >%log%
for /f %%a IN (%log%) Do delage32 %%a *.* 3 /recurse
Das Problem scheint zu sein, dass die Ordnernamen zum größten Teil eine Länge
von mehr als 8 Zeichen haben und/oder Leerzeichen enthalten.
Die Pfade, die im Logfile stehen sind 100% korrekt aber das was er dann
per for Schleife ausliest haut nicht hin, da verschluckt er alles was länger als
8 Zeichen ist bzw. ein Leerzeichen enthält. Un dsomit gehts nicht.
Hat wer eine Idee?
Auf einem Server werden durch verschiedene Benutzer in einem Ordner xyz Unterverzeichnisse angelegt.
Eine Applikation generiert dynamisch in diesem Ordner xyz jeweils in den User-Ordnern einen "2delete" Ordner.
Ich versuche nun eine Batch-Datei zu schreiben, die
1.) alle "2delete" Ordner sucht, und in ein LogFile schreibt
2.) Jeweils IN diesem "2delete" Ordner ALLE Dateien sucht, die älter als 3 Tage sind und diese dann löscht.
3.) Anschließend noch ALLE leeren Ordner innerhalb "2delete" löscht.
Meine Ansätz bisher:
Ansatz1 - FORFILES
set=log_delete.log
dir /b /s /a:d c:\application\user\ |find /i "2delete" >%log%
for /f %%a IN (%log%) DO FORFILES /p %%a /s /m *.* /d -3 /c "CMD /c del /q @File
Ansatz2 - delage32
set=log_delete.log
dir /b /s /a:d c:\application\user\ |find /i "2delete" >%log%
for /f %%a IN (%log%) Do delage32 %%a *.* 3 /recurse
Das Problem scheint zu sein, dass die Ordnernamen zum größten Teil eine Länge
von mehr als 8 Zeichen haben und/oder Leerzeichen enthalten.
Die Pfade, die im Logfile stehen sind 100% korrekt aber das was er dann
per for Schleife ausliest haut nicht hin, da verschluckt er alles was länger als
8 Zeichen ist bzw. ein Leerzeichen enthält. Un dsomit gehts nicht.
Hat wer eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 131974
Url: https://administrator.de/forum/bestimmte-ordner-suchen-darin-enthaltene-dateien-aelter-als-3-tage-loeschen-und-anschliessend-leere-ordner-131974.html
Ausgedruckt am: 23.04.2025 um 05:04 Uhr
5 Kommentare
Neuester Kommentar

...ist aber keine nette Begrüßung....
..und deine Frage haben hier bestimmt schon mehr als 10 gestellt und wurde(n) gelöst
doppelte " benutzen?
Mich würde mal echt interessieren, was sich so mancher denkt und wer seine Gehaltserhöhung Brain 2.0 / Web 2.0 verdankt...
Menno das mus doch wirklich nicht sein - hier kriegt man soviel frei Frank Biber&Schollund Gratis, da kann man doch etwas Eigeninitiative oder zumindestens Höflichkeit erwarten.
Und weil ich den Spruch mit dem Wald wortwörtlich nehme - ich bins das Echo
..und deine Frage haben hier bestimmt schon mehr als 10 gestellt und wurde(n) gelöst
da verschluckt er alles was länger als 8 Zeichen ist bzw. ein Leerzeichen enthält.
Und was macht man dann?doppelte " benutzen?
Mich würde mal echt interessieren, was sich so mancher denkt und wer seine Gehaltserhöhung Brain 2.0 / Web 2.0 verdankt...
Menno das mus doch wirklich nicht sein - hier kriegt man soviel frei Frank Biber&Schollund Gratis, da kann man doch etwas Eigeninitiative oder zumindestens Höflichkeit erwarten.
Und weil ich den Spruch mit dem Wald wortwörtlich nehme - ich bins das Echo
Moin JanDark,
willkommen im Forum.
Du hast sicherlich nicht verdient, gleich eine volle Breitseite abzubekommen, aber speziell heute warst du der Tropfen, der das Fass zum Explodieren gebracht hat.
[ @JanDark/@T-Mo: Soll nicht diskriminierend sein: bei Bedarf "Tropf/Fass/explodieren" durch "Funke/edles Tröpfchen/Knaller" oder ähnliches ersetzen]
Zu deiner Frage:
Wenn du Strategie 2 (eine Textdatei mit FOR /F-Auslesen ) weiterverfolgen willst:
In deinem Fall (ungetestet):
Grüße
Biber
willkommen im Forum.
Du hast sicherlich nicht verdient, gleich eine volle Breitseite abzubekommen, aber speziell heute warst du der Tropfen, der das Fass zum Explodieren gebracht hat.
[ @JanDark/@T-Mo: Soll nicht diskriminierend sein: bei Bedarf "Tropf/Fass/explodieren" durch "Funke/edles Tröpfchen/Knaller" oder ähnliches ersetzen]
Zu deiner Frage:
Wenn du Strategie 2 (eine Textdatei mit FOR /F-Auslesen ) weiterverfolgen willst:
FOR /F "delims=" %%i in (eineTextdatei) DO whateverWith "%%i"
...nimmt die komplette Zeile (auch wenn Leerzeichen / mehrere "Token" enthalten sind.In deinem Fall (ungetestet):
for /f "delims=" %%a IN (%log%) Do delage32 "%%a\*.*" 3 /recurse
Grüße
Biber