Script zum Löschen von Dateien nach Datum und Uhrzeit
Hallo, ich möchte auf einem FritzNAS (USB-Stick) täglich - vom Vortag - aber nur bestimmte *.mp4 Dateien innerhalb einer bestimmten Uhrzeit, z. B. von 13:00 Uhr bis 00:00 Uhr finden und löschen. Ich habe schon gegoogelt habe aber nichts mit Uhrzeit(en) sondern nur Datum (ganze Tage) hierzu gefunden. Wer kann mir hier helfen, eine Vorlage oder dgl. zur Verfügung stellen. Ich bin nicht ganz unbedarft aber kein Programmierer etc.
Vielen Dank im Voraus!
Schönen Sonntag noch …
Vielen Dank im Voraus!
Schönen Sonntag noch …
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 44242030959
Url: https://administrator.de/forum/script-zum-loeschen-von-dateien-nach-datum-und-uhrzeit-44242030959.html
Ausgedruckt am: 20.04.2025 um 18:04 Uhr
8 Kommentare
Neuester Kommentar
Hi,
Warum nochmal genau VBS? Das was in VBS mindestens ein langsamer 15-Zeiler wäre ist in Powershell ein schneller 1-Zeiler bis 3-Zeiler
mit dem Argument -Depth kannst du sogar die Pfadtiefe festlegen.
Grüße
Warum nochmal genau VBS? Das was in VBS mindestens ein langsamer 15-Zeiler wäre ist in Powershell ein schneller 1-Zeiler bis 3-Zeiler
[datetime]$start = '2016-01-01 00:00:00'
[datetime]$end = '2016-02-01 00:00:00'
Get-ChildItem -Path "<your path oder network-path>" -Include "*.mp4" -Recurse | Where-Object `
{$_.LastWriteTime -ge $start -and $_.LastWriteTime -le $end} | Remove-Item
mit dem Argument -Depth kannst du sogar die Pfadtiefe festlegen.
Get-ChildItem -Path "<your path oder network-path>" -Include "*.mp4" -Recurse -Depth 4 | `
Where-Object {$_.LastWriteTime -ge ([datetime]'2016-01-01 00:00:00') -and $_.LastWriteTime -le ([datetime]'2016-02-01 00:00:00')} | `
Remove-Item
Zitat von @NickOH:
@mayho33 - Frage: Muss ich die Befehle einzeln im Eingabefenster mit Admin-Rechten eingeben oder kann das auch als normaler User funktionieren.
Powershell ließt ein Script zeilenweise. Jede neue Zeile ist gleichzeitig ein Befehlsabschluss. Würdest du alles in einer Zeile schreiben müsstest du jeden Befehl mit einem ";" abschließen.@mayho33 - Frage: Muss ich die Befehle einzeln im Eingabefenster mit Admin-Rechten eingeben oder kann das auch als normaler User funktionieren.
Du findest einen "Pipe"-Parameter ( | ) und einen "BackTick"-Parameter ( ` ). Der BackTick kann dazu genutzt werden ein Script leserlicher zu gestalten, weil damit ein langer Befehls in mehrere Zeilen aufgeteilt werden kann bevor der Befehl endet.
bsp:
Get-ChildItem -Path "<your path oder network-path>" `
-Include "*.mp4" `
-Recurse | Where-Object `
{$_.LastWriteTime -ge $start -and $_.LastWriteTime -le $end} | `
Remove-Item
Powershell gibt jedes Ergebnis nicht einfach als Zeichenfolge aus wie etwa Batch und großteils auch VBS sondern als Object mit Eigeschaften. Der Pipe-Parameter übernimmt das Ergebnis-Object aus dem vorherigen Befehl und übergibt es direkt dem nächsten. Das bedeutet, dass ein Object aus dem Ergebnis direkt angesprochen und weiterverarbeitet werden kann mit einem Object-Platzhalter ( $_ ).
Hat ein Object mit Namen Anstrich also 3 Properties mit Namen Farbe, Dicke und Laenge...
#nur ein Beispiel!!
$Anstrich = @()
#Object erstellen
$tmp = New-Object PSObject
#Properties erstellen und füllen
$tmp | Add-Member Noteproperty -Name Farbe -Value "DarkGrey"
$tmp | Add-Member Noteproperty -Name Dicke -Value 2
$tmp | Add-Member Noteproperty -Name Laenge -Value 21
#Object einem Übergeordneten Object zuweisen
$Anstrich += $tmp
$tmp = New-Object PSObject
$tmp | Add-Member Noteproperty -Name Farbe -Value "Orange"
$tmp | Add-Member Noteproperty -Name Dicke -Value 1
$tmp | Add-Member Noteproperty -Name Laenge -Value 49
$Anstrich += $tmp
$tmp = New-Object PSObject
$tmp | Add-Member Noteproperty -Name Farbe -Value "Blue"
$tmp | Add-Member Noteproperty -Name Dicke -Value 4
$tmp | Add-Member Noteproperty -Name Laenge -Value 87
$Anstrich += $tmp
cls
$Anstrich

Bsp:
$Anstrich | Where-Object {$_.Farbe -match "grey"}
#oder
$Anstrich | ? {$_.Farbe -match "grey"}

Du musst das script mit den Rechten laufen lassen die auf dem Ziel erlaubt sind. Wenn du also mit User XX2 auf dem Pfad löschen, moven darfst mit XX5 aber nicht, musst du mit XX2 das Script laufen lassen
Wenn ich das zeitlich in der Nacht, als Task, ablaufen lassen möchte, kann ich die einzelnen Befehle in einer Datei zusammenfassen und welche Endung ist notwendig (*.bat ?).
Sicherheitshalber solltest du jeden Code den du aus dem Browser kopierst vorher in das gute alte Notepad (Windows-Standard-Editor) kopieren und dann aus diesem Editior dort hin wo du es brachst. Der Grund ist folgender:
Im Browser wird Text eventuell in einer anderen Schrift formatiert. WEnn du den 1:1 übernimmst, bekommt du eventuell einen Laufzeitfehler der nicht leicht zu finden ist. Im Editor hast du immer eine kompatible Schrift sofern du da nichts geändert hast.
Gutes Gelingen!

Zitat von @NickOH:
täglich - vom Vortag - aber nur bestimmte *.mp4 Dateien innerhalb einer bestimmten Uhrzeit, z. B. von 13:00 Uhr bis 00:00 Uhr finden und löschen.
täglich - vom Vortag - aber nur bestimmte *.mp4 Dateien innerhalb einer bestimmten Uhrzeit, z. B. von 13:00 Uhr bis 00:00 Uhr finden und löschen.
# Basisordner
$folder = "\\fritz.box\fritz.nas\Videos"
# von gestern um 13:00
$start = (get-date "13:00").AddDays(-1)
# bis heute 0:00 Uhr
$end = (get-date).Date
# Dateien die zutreffen löschen
Get-ChildItem $folder -File -Recurse -Filter *.mp4 | ?{$_.LastWriteTime -ge $start -and $_.LastWriteTime -le $end} | remove-item -force -verbose
Gruß sid