Dateien älter als 48 Stunden automatisch löschen
Moin
Bei uns im Betrieb haben wir einen sog. "Scanfolder" sprich dort können Mitarbeiter von unseren Multifunktionsgeräten
Dokumente scannen lassen. Sehr oft werden die Dateien danach nicht gelöscht. Nun möchte ich dies automatisieren soweit möglich, d.h. alle Dateien die sich im Scanfolder (so heisst er auch) befinden, und älter als 48h werden automatisch gelöscht, dies könnte ein Task sein, der jede nach um eine gewisse Zeit läuft.
Das Problem ist aber wie Umsetzen ?
Hat da jemand eine "Pfannenfertige" Lösung ?
Bei uns im Betrieb haben wir einen sog. "Scanfolder" sprich dort können Mitarbeiter von unseren Multifunktionsgeräten
Dokumente scannen lassen. Sehr oft werden die Dateien danach nicht gelöscht. Nun möchte ich dies automatisieren soweit möglich, d.h. alle Dateien die sich im Scanfolder (so heisst er auch) befinden, und älter als 48h werden automatisch gelöscht, dies könnte ein Task sein, der jede nach um eine gewisse Zeit läuft.
Das Problem ist aber wie Umsetzen ?
Hat da jemand eine "Pfannenfertige" Lösung ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4674784886
Url: https://administrator.de/forum/dateien-aelter-als-48-stunden-automatisch-loeschen-4674784886.html
Ausgedruckt am: 12.04.2025 um 13:04 Uhr
12 Kommentare
Neuester Kommentar

Freitag da benutzt wohl keiner mehr die Suchfunktion
... Das findest du hier millionenfach ....
oder forfiles
usw. ...
ls 'D:\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose
forfiles /P D:\Scordner /D -2 /c "cmd /c del @path"

Uuuups natürlich da hat die Hand schneller getippt als das Hirn nachgekommen ist
🙈.

Zitat von @uridium69:
Wenn ich nun einen UNC Pfad hinzufügen will anstatt ein lokales Laufwerk zb. \\FileserverTemp\Scanfolder, verhält es sich gleich ?
Macht keinen Unterschied, hätte man ja eigentlich auch selbst herausfinden können, kopfkratz ... 🐟 .Wenn ich nun einen UNC Pfad hinzufügen will anstatt ein lokales Laufwerk zb. \\FileserverTemp\Scanfolder, verhält es sich gleich ?

die ' brauchst du, wenn der Pfad Leerzeichen enthält. Schaden aber in keinem Fall.
In Skripten empfiehlt es sich für die Leserlichkeit die Aliase (ls, ?, del) durch die richtigen Commandlets zu ersetzen (Get-ChildItem, Where-Object, Remove-Item)
Get-ChildItem '\\Servername\Verziechnis1\Scanfolder' -File | Where-Object LastWriteTime -lt (Get-Date).AddHours(-48) | Remove-Item -Force -Verbose
In Skripten empfiehlt es sich für die Leserlichkeit die Aliase (ls, ?, del) durch die richtigen Commandlets zu ersetzen (Get-ChildItem, Where-Object, Remove-Item)

Fehlen da die \\ am Anfang?
ls '\\ws-pc-72\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose

Zitat von @uridium69:
Noch eine Frage, wenn ich Unterordner auch Berücksichtigen will , wie wäre der Befehlt dazu?
Gehen wir davon aus, das es von Benutzer erstellten Unterordner gibt, und diese auch gelöscht haben möchte mitsamt Inhalt, ich frage dies, da wir einen anderen Ordner haben "Temp" wo für alle zugänglich sind, und als Datenaustausch gedacht sind, aber dort bleiben oft Dateien und auch Unterordner mitsamt Dateien ewig liegen.
Noch eine Frage, wenn ich Unterordner auch Berücksichtigen will , wie wäre der Befehlt dazu?
Gehen wir davon aus, das es von Benutzer erstellten Unterordner gibt, und diese auch gelöscht haben möchte mitsamt Inhalt, ich frage dies, da wir einen anderen Ordner haben "Temp" wo für alle zugänglich sind, und als Datenaustausch gedacht sind, aber dort bleiben oft Dateien und auch Unterordner mitsamt Dateien ewig liegen.
Get-ChildItem '\\ws-pc-72\Scanfolder' -File -Recurse | Where-Object LastWriteTime -lt (Get-Date).AddHours(-48) | Remove-Item -Force -Verbose
Das "-Recurse" schließt alle Unterordner und Dateien mit ein.
Edit:
Das "-File" bei Get-ChildItem bewirkt, dass nur Dateien aufgelistet werden. Sollen auch Unterordner selbst gelöscht werden, musst du das "-File" weglassen.
(ich habe die Aliase (Abkürzungen) nochmal durch die kompletten CmdLets ersetzt, ls = Get-ChildItem, ? = Where-Object und del = Remove-Item)