uridium69

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 ?
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 4674784886

Url: https://administrator.de/forum/dateien-aelter-als-48-stunden-automatisch-loeschen-4674784886.html

Ausgedruckt am: 02.08.2025 um 07:08 Uhr

4400667902
Lösung 4400667902 18.11.2022 aktualisiert um 13:03:12 Uhr
Freitag da benutzt wohl keiner mehr die Suchfunktion face-sad ... Das findest du hier millionenfach ....
ls 'D:\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose  
oder forfiles
forfiles /P D:\Scordner /D -2 /c "cmd /c del @path"  
usw. ...
Crusher79
Lösung Crusher79 18.11.2022 um 12:53:35 Uhr
Eben...

Mit -48 wäre es nur schöner irgendwie.

ls 'D:\Scanfolder' -File | ?{$_.LastWriteTime -lt (get-date).AddHours(-48)} | del -Force -verbose  
4400667902
4400667902 18.11.2022 aktualisiert um 12:57:04 Uhr
Zitat von @Crusher79:
Mit -48 wäre es nur schöner irgendwie.
Uuuups natürlich da hat die Hand schneller getippt als das Hirn nachgekommen ist face-smile 🙈.
uridium69
uridium69 18.11.2022 aktualisiert um 14:31:41 Uhr
Danke schon mal für die Hilfe, ich habe es mal probehalber auf meinem PC geprüft und einige heutige Files und ältere reinkopiert, Befehlt ausgeführt und bis auf die heutigen waren alle anderen weg. Wenn ich nun einen UNC Pfad hinzufügen will anstatt ein lokales Laufwerk zb. \\FileserverTemp\Scanfolder, verhält es sich gleich ?
4400667902
4400667902 18.11.2022 aktualisiert um 14:34:58 Uhr
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 ... 🐟 .
uridium69
uridium69 21.11.2022 um 14:59:24 Uhr
Die ' kommen auch vor den UNC Pfad nehm ich mal an ? Bsp. '\\Servername\Verziechnis1\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose ?
3063370895
3063370895 21.11.2022 aktualisiert um 15:03:34 Uhr
die ' brauchst du, wenn der Pfad Leerzeichen enthält. Schaden aber in keinem Fall.
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)
uridium69
uridium69 06.12.2022 um 09:12:10 Uhr
Update:

Das Löschen des Scanfolders, klappt einwandfrei mit folgendem Befehl, auch als Scheduled Task:

ls 'c:\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force –verbose

Wenn ich aber den PC-Name (zum Testen mein eigener PC) eingebe, funktioniert die Sache nicht, den Ordner Scanfolder habe ich natürlich vorher freigegeben (Everyone).

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

Was mache ich falsch? Weil am Ende wird der Task auf den richtigen Scanfolder auf unserem Fileserver ausgeführt, mein PC dient nur als "Spielwiese"
3063370895
3063370895 06.12.2022 um 09:46:26 Uhr
Fehlen da die \\ am Anfang?

ls '\\ws-pc-72\Scanfolder' -File | ? LastWriteTime -lt (get-date).AddHours(-48) | del -Force -verbose  
uridium69
uridium69 06.12.2022 um 10:31:03 Uhr
@chaot1coz: Bingo, wie kann ich so doof sein, ohne \\ geht nichts, Logo. Danke Dir (rotwerd)
uridium69
uridium69 06.12.2022 um 10:50:30 Uhr
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.
3063370895
3063370895 06.12.2022 aktualisiert um 10:56:59 Uhr
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.

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)