Ich möchte nur die Dateien löschen, die vor mehr als 15 Tagen in einem bestimmten Ordner erstellt wurden. Wie kann ich das mit PowerShell machen?
powershell
powershell-2.0
powershell-3.0
user2470170
quelle
quelle
Antworten:
Mit den gegebenen Antworten werden nur Dateien gelöscht (was zugegebenermaßen im Titel dieses Beitrags steht). Hier ist jedoch ein Code, der zuerst alle Dateien löscht, die älter als 15 Tage sind, und dann alle verbleibenden leeren Verzeichnisse rekursiv löscht hinter. Mein Code verwendet auch die
-Force
Option, um versteckte und schreibgeschützte Dateien zu löschen. Auch ich wählte nicht Aliase zu verwenden , da die OP neu in Powershell ist und kann nicht verstehen , wasgci
,?
,%
etc. ist.Und wenn Sie sehen möchten, welche Dateien / Ordner gelöscht werden, bevor Sie sie tatsächlich löschen, können Sie den
-WhatIf
Schalter einfach zumRemove-Item
Cmdlet-Aufruf am Ende beider Zeilen hinzufügen .Der hier gezeigte Code ist PowerShell v2.0-kompatibel, aber ich zeige diesen Code und den schnelleren PowerShell v3.0-Code auch als praktische wiederverwendbare Funktionen in meinem Blog .
quelle
einfach (PowerShell V5)
quelle
Eine andere Möglichkeit besteht darin, 15 Tage vom aktuellen Datum abzuziehen und mit
CreationTime
diesem Wert zu vergleichen :quelle
Grundsätzlich iterieren Sie über Dateien unter dem angegebenen Pfad, subtrahieren die
CreationTime
von jeder gefundenen Datei von der aktuellen Zeit und vergleichen sie mit derDays
Eigenschaft des Ergebnisses. Der-WhatIf
Schalter teilt Ihnen mit, was passieren wird, ohne die Dateien tatsächlich zu löschen (welche Dateien werden gelöscht). Entfernen Sie den Schalter, um die Dateien tatsächlich zu löschen:quelle
Versuche dies:
quelle
-recurse
ist einer zu viel, nein? Die Verzeichnisliste ist rekursiv, das Löschen des Elements sollte nicht mit Kindern erfolgen, oder?Das Skript von Esperento57 funktioniert in älteren PowerShell-Versionen nicht. Dieses Beispiel macht:
quelle
Eine andere Alternative (15. wird automatisch in [Zeitspanne] eingegeben):
quelle
Dadurch werden alte Ordner und deren Inhalt gelöscht.
quelle
Wenn Sie Probleme mit den obigen Beispielen auf einer Windows - 10 - Box haben, versuchen Sie ersetzen
.CreationTime
mit.LastwriteTime
. Das hat bei mir funktioniert.quelle
LastwriteTime
ist nicht dasselbe wieCreationTime
,LastwriteTime
wird jedes Mal aktualisiert, wenn die Datei geändert wird.quelle
$Files
leer ist, die foreach- Anweisung nicht eingibt . Sie sollten das foreach in die if- Anweisung einfügen .