Alle Dateien bestimmten Alters außer 2 Ordner mit Unterordnern löschen inklusive Log?

1 Antwort

das Problemchen teilen wir am besten in 2 Abschnitte:

  1. Die Dateien in den vorgesehenen Ordnern und tiefer
  2. 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:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
3unknow3HD 
Fragesteller
 19.01.2021, 10:13

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\).

0
Erzesel  19.01.2021, 11:20
@3unknow3HD

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

0
3unknow3HD 
Fragesteller
 19.01.2021, 11:29
@Erzesel

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.

0