Alte Dateien löschen, aber nicht die 1. Ebene der Unterverzeichnisse
Hallo zusammen
Ich weiß, dass es hierzu schon einige Threads gibt, diese habe ich mir auch schon durchgelesen.
Leider passt da aber nicht so wirklich zu meinem Problem.
Und zwar habe ich vor, in einem Verzeichnis alle Dateien, die älter als x Tage sind automatisch zu löschen.
Ausnahme: Die 1. Ebene sollte da bleiben.
Beispiel:
Ich gebe C:\Ordner als Initialpfad an, Ordner A,B,C sollen aber da bleiben, auch wenn sie leer sind. -> Drunter alles weg (was x Tage älter ist)
Ich habe mich daran schon versucht, hänge jetzt aber an einer Stelle.
Ich dachte mir, den Pfad in Variablen zu schreiben um dann die Pfade mit nur dem Initialpfad + eine Ebene (C.\Ordner\OrdnerA) auszusortieren.
Könnte dann delage32 nochmal mit der Option /rd drüberlaufen lassen, da er ja dann leere Verzeichnisse löscht.
Leider weiß ich nicht wie ich da weiter vorgehen soll, oder ob ich da auch völlig verkorkst denke.
Vielleicht geht das ja um einiges einfacher.
Vielleicht hat jemand von euch eine Idee wie ich das realisieren kann.
Wollte dann evtl noch einbauen, das man angeben kann wieviele Ebenen er stehen lässt, da bei manchen Verzeichnisse auch die 2. bleiben soll.
Besten Dank schon mal im Vorraus für eure Hilfe.
Ich weiß, dass es hierzu schon einige Threads gibt, diese habe ich mir auch schon durchgelesen.
Leider passt da aber nicht so wirklich zu meinem Problem.
Und zwar habe ich vor, in einem Verzeichnis alle Dateien, die älter als x Tage sind automatisch zu löschen.
Ausnahme: Die 1. Ebene sollte da bleiben.
Beispiel:
C:\Ordner\OrdnerA
\OrdnerB
\OrdnerC
Ich habe mich daran schon versucht, hänge jetzt aber an einer Stelle.
@echo off
set dir=%~dpnx1
set age=%2
delage32.exe %dir%\*.* %age% /recurse /created /modified
for /R %dir% %%i in (.) DO @echo %%~dpnxi >>temp.txt
for /f "delims=\ tokens=1-10*" %%i in (temp.txt) DO @echo %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r
del temp.txt
Ich dachte mir, den Pfad in Variablen zu schreiben um dann die Pfade mit nur dem Initialpfad + eine Ebene (C.\Ordner\OrdnerA) auszusortieren.
Könnte dann delage32 nochmal mit der Option /rd drüberlaufen lassen, da er ja dann leere Verzeichnisse löscht.
Leider weiß ich nicht wie ich da weiter vorgehen soll, oder ob ich da auch völlig verkorkst denke.
Vielleicht geht das ja um einiges einfacher.
Vielleicht hat jemand von euch eine Idee wie ich das realisieren kann.
Wollte dann evtl noch einbauen, das man angeben kann wieviele Ebenen er stehen lässt, da bei manchen Verzeichnisse auch die 2. bleiben soll.
Besten Dank schon mal im Vorraus für eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 103345
Url: https://administrator.de/contentid/103345
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
8 Kommentare
Neuester Kommentar
Meine ungetestete Idee dazu:
Wenns tut wie es soll dann die ECHOs entfernen.
Es wird, vom grundverzeichnis ausgehend, alle unterverezeichnisse gesucht und nahc einander in diese gewechselt (mit pushd). Danach wird die Unterprozedur killthem aufgerufen die im aktuellen verzeichnis Dateien löscht die zu alt sind. außerdem prüft sie welche rekorsionstiefe sie zum grundverzeichnis hat und sollte diese teife erreicht sein (rückwärts zählen bis 0) werden auch verzeichnisse gelöcht die zu alt sind.
Nach jedem unterprozeduraufruf wird ins letzte (höhere) verzeichnis zurück gewechselt (mit popd)
@echo off
set dir=%~dpnx1
set age=%2
set deep=5
for /f "delims=" %%i in ('dir /b /ad "%dir%"') do (
rem Wechsle in das Verzeichnis "%%~i"
pushd "%dir%\%%~i"
rem rufe löschunterprozedur auf
call:killthem
rem Wechsle ein verzeichnis zurück
popd
)
goto:eof
:killthem
rem zähle die ebenen die stehn bleiben sollen runter.
set /a deep=%deep%-1
if %deep% gtr 0 (
rem wenn in einer ebene angekommen inder kene verzeichnisse gelöscht werden dürfen liste alle verzeichnisse auf und wechsle in diese
for /f "delims=" %%j in ('dir /b /ad') do (
pushd "%%~j"
rem rufe löschunterprozedur auf
call:killthem
rem Wechsle ein verzeichnis zurück
popd
)
) else (
rem ab einer ebene in der auch Verzeichnisse gelöscht werden dürfen löche alle verzeichnisse die zu alt sind
ECHO delage32.exe %age% /recurse /created /modified /rd
)
rem lösche alle Dateien die zu alt sind. Dies geschieht in allen unterverzeichnissen
ECHO delage32.exe %age% /recurse /created /modified
goto:eof
Es wird, vom grundverzeichnis ausgehend, alle unterverezeichnisse gesucht und nahc einander in diese gewechselt (mit pushd). Danach wird die Unterprozedur killthem aufgerufen die im aktuellen verzeichnis Dateien löscht die zu alt sind. außerdem prüft sie welche rekorsionstiefe sie zum grundverzeichnis hat und sollte diese teife erreicht sein (rückwärts zählen bis 0) werden auch verzeichnisse gelöcht die zu alt sind.
Nach jedem unterprozeduraufruf wird ins letzte (höhere) verzeichnis zurück gewechselt (mit popd)