Powershell sortiert Dateien nach Datum

in programming •  7 years ago  (edited)

Bilder retten und sortieren


Okay eine kleine Vorgeschichte. Ich hatte einst eine Festplatte welch all meine Bilder beinhielt. Diese zeigte von heut auf morgen irgendein MBR Fehler. Wütend hätte ich sie fast herausgerissen und zerstört.

Scream

Doch Internet sei dank und langer suche bin ich auf das Programm TestDisk gestoßen und konnte somit einen großen Teil meiner Bilder retten. (yeeeessss)

yeskid

Nun hatte das Programm TestDisk meine Bilder wiederhergestellt jedoch waren die alle in kryptische Ordner. Einige erhielten das Aufnahmedatum aber leider wurde bei vielen Bilder nicht das richtige Datum wiederhergestellt und erhielten das Wiederherstellungsdatum (Deutsch ist wundervoll).

Mhn nun saß ich da vor den über tausenden Bildern und sollte die per Hand sortieren?

yeskid

Nach einer weiteren kleinen suche bin ich auf die Idee gekommen das mit der PowerShell von Windows zu lösen.
Dazu haben ich den Code von dem guten Thomasmaurer verwendet und etwas angepasst.

Die Ordnernummern sollten zweistellig sein. Also 01,02,03 ... 11,12 . Halt für jeden Monat und mit einer 0 davor kommt Windoof etwas besser klar.

Kurz noch den Ordnerpfad der Bilder angepasst und den neuen Pfad der Bilder ebenfalls.

**Boom**

Alle Bilder wurden nach dem Jahr und Monat sortiert.

Fertiger Code:

# Get the files which should be moved, without folders
$files = Get-ChildItem 'N:\Backup-maxtor\2018' -Recurse | where {!$_.PsIsContainer}

# List Files which will be moved
$files

# Target Filder where files should be moved to. The script will automatically create a folder for the year and month.
$targetPath = 'N:\Backup-maxtor\2018'

foreach ($file in $files)
{
# Get year and Month of the file
# I used LastWriteTime since this are synced files and the creation day will be the date when it was synced
$year = $file.LastWriteTime.Year.ToString()
if ($file.LastWriteTime.Month -lt 10)
{
$month ="0"+$file.LastWriteTime.Month.ToString()
}
else{
$month = $file.LastWriteTime.Month.ToString()
 }

# Out FileName, year and month
$file.Name
$year
$month


# Set Directory Path
#new Path with year and month
 $Directory = $targetPath + "\" + $year + "\" + $month
#new Path Path with month only
#$Directory = $targetPath + "\" + $month
# Create directory if it doesn't exsist
if (!(Test-Path $Directory))
{
New-Item $directory -type directory
}

# Move File to new location
$file | Move-Item -Destination $Directory
}

Don't be stupid and program it

hackerman

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

High Quality Shitpost :D Gefällt mir.
Hatte sowas ähnliches in Shell auf einem Shopsystem mal gemacht.
Der Kunde war so dämlich und hat Bilder nie Gelöscht aber das Shopsystem 3 mal umgestaltet. Habe demnach ein Shell Script geschrieben was alles ebenfalls sortiert und er durfte dann löschen. Das war ne Arbeit :/ Bist du auch im IT Sektor? @daszod

Hahaha vielen dank :D
Ich hatte für meinen ersten Beitrag auch echt spass den zu erstellen :)

Ich fokussiere mich gerade darauf HTML, CSS und Javascript zu lernen (Front-Backend). Grundprinzipien der Programmierung hab ich etwas verstanden aber bin noch kein Programmierer in meinen Augen. @deradministrator