Dateien nach Datum sortieren per PowerShell

Wenn man eine Ansammlung mehrerer Tausend Dateien hat, welche unsortiert in einem Ordner abgelegt sind, kann es praktisch sein, diese Dateien nach Alter zu sortieren. Noch besser ist es, wenn man diese Aufgabe nicht manuell ausführen muss, sondern automatisiert – zum Beispiel per Windows PowerShell.

DQo8cD48YnIvPg0KPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2pzL2Fkc2J5Z29vZ2xlLmpzIj48L3NjcmlwdD4NCjwhLS0gVEVDSEZBUSAtIEltIEFydGlrZWwgLS0+DQo8aW5zIGNsYXNzPSJhZHNieWdvb2dsZSINCiAgICAgc3R5bGU9ImRpc3BsYXk6YmxvY2siDQogICAgIGRhdGEtYWQtY2xpZW50PSJjYS1wdWItOTI5NDg1MzEyMDc1NDI3OSINCiAgICAgZGF0YS1hZC1zbG90PSI1MDc3NjQ3MTY5Ig0KICAgICBkYXRhLWFkLWZvcm1hdD0iYXV0byINCiAgICAgZGF0YS1mdWxsLXdpZHRoLXJlc3BvbnNpdmU9InRydWUiPjwvaW5zPg0KPHNjcmlwdD4NCiAgICAgKGFkc2J5Z29vZ2xlID0gd2luZG93LmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHt9KTsNCjwvc2NyaXB0Pjxici8+PC9wPg0K

Mit der PowerShell automatisch Dateien archivieren

Im konkreten Fall ging es um ein Verzeichnis, in welchem seit fast zehn Jahren Ausgangsrechnungen als PDF-Dateien abgelegt wurden. Dort waren mehrere zehntausend Dateien zusammengekommen, wodurch Windows inzwischen äußerst träge reagierte, wenn man diesen Ordner aufrief. Die Idee war: Mittels eines PowerShell Skripts die Dateien nach Datum sortieren.

Das Archiv sollte nach Jahren aufgebaut sein und danach die Dateien nach Monaten abgelegt werden. Also einen Ordner für das Jahr (z.B. 2021) und darin mehrere Ordner für die Monate (01, 02, … 12). Ausschlaggebend sollte das Änderungsdatum der PDF-Datei sein.

Das fertige Skript sah dann folgendermaßen aus:

# Skript für die automatische Verteilung von Dateien nach deren Änderungsdatum
# Dateien werden in einen Archivordner verschoben und darin nach Jahr und Monat in Unterordnern sortiert.
# Dateiendungen sind frei wählbar

$tage = 7 # Dateien, die älter sind als dieser Wert (in Tagen) werden verschoben.
$quelle = "C:\Temp"  # Dateien aus diesem Verzeichnis werden verschoben
$ziel = "C:\Temp\ARCHIV"  # Basisverzeichnis für die Archive
$dateityp = "*.docx", "*.pdf" # Array erweiterbar durch ,"*.xyz"
 
$DatumVorXTagen = (Get-Date).AddDays(-$tage)
 gci $quelle -PipelineVariable anzahl | where {$_.lastwritetime -lt $DatumVorXTagen -and -not $_.psiscontainer} | %{ 
     gci $_.FullName -Filter * -include $dateityp -recurse -File | group {$_.LastWriteTime.ToString('yyyy\MM')} | %{
          $zielordner = "$ziel\$($_.Name)"
          if(!(Test-Path $zielordner)){md $zielordner | out-null}
          $_.Group | move-item -Destination $zielordner -Force -Verbose
     }
 }
Dateien nach Datum sortieren
Archivierung der Dateien nach deren Änderungsdatum
Mit der PowerShell automatisch Dateien archivieren
Die automatisch angelegte Struktur des Dateiarchives im Windows Explorer.

Mit Parametern nur bestimmte Dateien nach Datum sortieren

Das Skript wurde noch dahingehend erweitert, dass einerseits nur die Dateien verschoben werden, die ein bestimmtes Alter erreicht haben, andererseits sollte der/die Dateitypen anpassbar sein.

  • Variable $tage
    Ist das Änderungsdatum der Datei älter als diese Anzahl Tage, wird die Datei verschoben und sortiert
  • Variable $quelle
    Quellpfad der Dateien, die archiviert werden sollen (Unterordner werden nicht mit eingeschlossen)
  • Variable $ziel
    Basispfad für das Dateiarchiv. Dort wird die Unterstruktur (Jahr – Monat) angelegt
  • Variable $dateityp
    Angabe der Dateiendungen, die bei der Archivierung berücksichtigt werden sollen.

Das Skript kann anschließend z.B. per Aufgabenplanung automatisch zu festgelegten Zeiten ausgeführt werden. Dadurch werden zukünftig alle neuen Dateien nach Datum sortiert und in die entsprechenden Archivordner verschoben.

Ebenfalls interessant:

Dieser Artikel ist wie alle anderen auf dieser Seite kostenlos für Dich und ich hoffe, ich konnte Dir weiterhelfen. Wer möchte, kann diesem Blog eine kleine Aufmerksamkeit in Form einer kleinen Spende (PayPal) oder über die Amazon Wunschliste zukommen lassen. Bitcoins gerne hier hin: 17zAdJSDYkukxeWFfSu5qjnmMtKamWzRuD.

2 Gedanken zu „Dateien nach Datum sortieren per PowerShell“

  1. Danke für diese anschaulichen Ausführungen. Änderungsdatum der Datei entspricht dem SaveTimeStamp, korrekt?
    Danke OneDrive ist das ja leider nicht mehr unbedingt das Mass der Dinge (hier haben die Dateien leider des Öftern neue Zeitstempel bekommen, ohne dass sich inhaltlich die Datei geändert hat) Kenne Sie eine Möglichkeit, dass man die Dateien mit Ihrem Skript so sortieren kann, dass es nicht auf den Dateizeitstempel im Suchordner, sondern wirklich auf den realen Bearbeitungszeitstempel reagiert? Bei Bildern zB. würde man von Aufnahmedatum sprechen.

    beste Grüsse
    René

    Antworten
    • Hallo René,

      bei Bildern sind diese Informationen in den EXIF-Daten gespeichert. Diese können meines Wissens (noch) nicht direkt ausgelesen werden. Eine kurze Suche bei Google zeigt, dass einige sich bereits mit dem Problem beschäftigt haben – möglicherweise findest Du irgendwo eine Funktion zum Importieren, die diese Daten ausliest.

      Ansonsten gibt es neben „LastWriteTime“ noch die Attribute „CreationTime“ (Erstelldatum) und „LastAccessTime“ (Letzter Zugriff am). Eventuell hilft das ja bereits weiter.

      Viele Grüße, René :-)

      Antworten

Schreibe einen Kommentar