Alle Dateien bestimmten Alters außer 2 Ordner mit Unterordnern löschen inklusive Log?
Alle Dateien bestimmten Alters außer 2 Ordner mit Unterordnern löschen inklusive Log. Bitte nur ganze Beispiele, am besten ein Batch-Script, Powershell-Script oder ein VBScript. Leider schaff ichs selbst nicht und finde dazu auch nichts (Auch nicht bei Google!!!!!!).
1 Antwort
das Problemchen teilen wir am besten in 2 Abschnitte:
- Die Dateien in den vorgesehenen Ordnern und tiefer
- Die Dateien in Ordnern ( die welche wir nicht verarbeiten wollen)
@echo off
chcp 65001 >nul
rem setze logdatei zurück
call >"%~dp0\del.log"
rem ich lösche nicht auf fremden Rechnern herum. Ergo nur eine Simulation. Zum Scharfmachen entferne das "echo" vor dem "del"-Befehl
rem lösche Dateien im aktuellen Ordner die älter als 13 Iage sind (nicht recursiv)
rem ignoriere Ordner (lassen sich ohnhin nicht mit "del" löschen)
rem die Logdatei wird im Ordner der Batch angelegt ( ist ja neuerer als 13 Tage und somit irrelevant für forfiles)
forfiles /m "*" /d -13 /c "cmd /c @if @isdir==FALSE echo @path>>\"%~dp0\\del.log\"& echo del @path"
rem im 2 Schritt Ordner auswerten...
rem gib Ordner in die Schleife (außer die Ordner "Erzesel HND" "Tommy" und "projekte" )
for /f "tokens=*" %%a in ('dir /b /a:d^|findstr /iv /c:"Erzesel HND" /c:"tommy" /c:"projekte"') do (
echo:
echo Verarbeite Ordner: "%%~a" recursiv
rem wie oben aber ...
rem für alle in %%a übergebenen Ordner und deren Unterordner (/s recursiv)
rem alle Dateien (*)
forfiles /p "%%~a" /s /m "*" /d -13 /c "cmd /c @if @isdir==FALSE echo @path>>\"%~dp0\\del.log\" & echo del @path"
)
pause
Glossar:
Von derartigen Voraussetzungen war in Deiner Frage nicht die Rede. (wie bereits bei anderen Fragen angesprochen, sollte man eine Frage präzise Formulieren.
Zudem ist geben wir hier Hilfestellung und erfüllen keine Auftragsarbeiten.
Außerdem sollte die Batch irgendwo platziert werden können und der Dateipfad immer derselbe sein
...und wo ist das Problem? Die Batch kann irgendwo sein und mit cd oder pushd wechselt man zum gewünschten Arbeitsordner.
Das sollte schon einem Anfänger vertraut sein
Ähnliches trifft auch für den Pfad/Name der Logdatei(en) zu.
@echo off
chcp 65001 >nul
rem bastle logfolder
set "logFolder=%~dp0\logs\%date%"
md "%logFolder%" 2>nul
set "mytime=%time::=-%"
set "mytime=%mytime:,=_%"
rem erzeuge Name für den Logfile
set "myLogFile=%logFolder%\%mytime%.log"
rem (Achtung Backslash ist für Forfiles ein Escapecharacter als für Pfade verdoppeln)
set "myLogFile=%myLogFile:\=\\%"
rem wechsle zu meinem Testordner :
cd /d "%userprofile%\desktop\test"
forfiles /m "*" /d -13 /c "cmd /c @if @isdir==FALSE echo @path>>\"%myLogFile%\"& echo del @path"
for /f "tokens=*" %%a in ('dir /b /a:d^|findstr /iv /c:"Erzesel HND" /c:"tommy" /c:"projekte"') do (
forfiles /p "%%~a" /s /m "*" /d -13 /c "cmd /c @if @isdir==FALSE echo @path>>\"%myLogFile%\" & echo del @path"
)
pause
is doch Anfängerk💩cke.
und natürlich stoßt es mir sauer auf, wenn jemand der nichtmal sowas Banales hinbekommt. Massenlöschaktionen ausführt
Es tut mir Leid dass ich nicht wusste dass das in deinem Script so auch funktioniert. Tut mir leid dass ich kein Profi bin so wie du. Tut mir Leid, dass ich erst in der Ausbildung bin und so gut wie nichts mit Batch am Hut habe, nur brauchte ich jetzt 2-3 Scripts weshalb ich auch fragte.
Vielen Dank, nur, was ist wenn ich die Log-Dateien immer in einem eigenen Ordner (.\Logs\%date%\%ftime1%.log (ftime1 = Zeit mit Bindestrichen anstatt durch Doppelpunkten getrennt)) speichere und die weder überschreiben noch dranhängen möchte? Außerdem sollte die Batch irgendwo platziert werden können und der Dateipfad immer derselbe sein (Bsp: C:\temp\test\).