reaper911211
Goto Top

Powershell Daten Sortieren nach Erstelljahr

Guten Tag,

ich bin derzeit dabei meine Daten zu sortieren und bin dabei vor Schock umgefallen wie viel sich bei mir doch angesammelt hat an Fotografien und anderen Bildern/Videos.

ich möchte die alle per Powershell Befehl sortieren.

ich habe mir bereits im Internet dazu einige sachen angesehen aber 90 % der Skripte die ich online sehen konnte sind so aufgebaut das diese nach dem "Zuletzt Geändert" und nicht nach dem Erstelldatum sortieren.

ich brauche das Skript so geschrieben das es nach Erstelldatum sortiert und wenn keines vorhanden ist (Falls es in den Details fehlt) soll die Datei in einen Separaten Ordner landen.

Ich hatte mir dieses Skript angesehen

# 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
     }
 }

An sich funktioniert das toll. Allerdings sortiert er hier nach dem falschen Kriterien. ich hatte versucht es eigenständig umzuändern so das ich es von dem letzte Änderung umschreiben kann auf das Erstelldatum allerdings bin ich dabei kläglich gescheitert.

hat jemand von euch eine Idee wie ich das hinbekommen kann das es nach den Jahren sortiert in dem das Bild/Video aufgenommen wurde ?

Ich bin leider nicht so tief in der Materie wenn es um solche spezifischen Sachen bei PowerShell geht.

Gruß

Reaper

Content-ID: 6782833166

Url: https://administrator.de/contentid/6782833166

Ausgedruckt am: 25.11.2024 um 13:11 Uhr

6247018886
6247018886 15.04.2023 aktualisiert um 17:50:25 Uhr
Goto Top
Wenn du das Exif-Aufnahmedatum meinst dann nimm am besten gleich exiftool damit ist das ein kurzer Einzeiler
Move or Copy image files into folders by year and month
Der Vorteil, Exif-Tool verarbeitet eine Menge Bild-Formate dessen Aufnahme-Datum der Explorer gar nicht auslesen kann.

Sollte das Erstelldatum deiner Dateien im Dateisystem schon mit dem Datum in den Exif-Daten übereinstimmen dann brauchst du aber oben im Skript nur das lastwritetime überall durch creationtime ersetzen.

Cheers briggs
CMDBlog
Lösung CMDBlog 15.04.2023 aktualisiert um 17:59:50 Uhr
Goto Top
Ich denke, so sollte es klappen:
# Skript für die automatische Verteilung von Dateien nach deren Erstellungsdatum
# 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"  
$ohneDatumZiel = "C:\Temp\ARCHIV\OHNE_DATUM" # Zielordner für Dateien ohne Erstellungsdatum  

$DatumVorXTagen = (Get-Date).AddDays(-$tage)

gci $quelle -PipelineVariable anzahl | where {-not $_.psiscontainer} | %{
    $datei = $_
    if($datei.CreationTime -lt $DatumVorXTagen){
        if($datei.CreationTime.Year -ne 1){
            $zielordner = "$ziel\$($datei.CreationTime.ToString('yyyy\MM'))"  
            if(!(Test-Path $zielordner)){md $zielordner | out-null}
            $datei | move-item -Destination $zielordner -Force -Verbose
        } else {
            if(!(Test-Path $ohneDatumZiel)){md $ohneDatumZiel | out-null}
            $datei | move-item -Destination $ohneDatumZiel -Force -Verbose
        }
    }
}