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.

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.