Oisin-D90
Themenersteller
Hallo,
ich hab ein PowerShell Script geschrieben, das Fotos von einem Ordner in eine andere Struktur kopiert, die Ordner benennt und die Dateien umbenennt. Ein paar Exif Infos werden aus den Tags ausgelesen und in's Kommentarfeld geschrieben.
Hintergrund: Alle meine Fotos werden aus meinem Foto Ordner direkt in ein Backup geschrieben. Die Fotos kann ich natürlich mit CaptureOne importieren und umbenennen. CaptureOne zeigt mir aber ein paar Exif Infos nicht an (Fokusfeld, VR Einstellung, AF Area Mode, etc...). Wenn ich die Infos nachträglich mit ExifTool in's Kommentarfeld schreibe, würde noch mal der Backup Prozess angestoßen werden.
Das Script macht folgendes:
- Alle Fotos aus den Unterordnern, wo das Script liegt, werden in meinen Fotos Ordner kopiert
- Es gibt einen "Basis-Ordner", mein Fotos Ordner
- Das Script fragt nach einem Unterordner in dem Basisordner, der angelegt wird, falls angegeben
- Befindet sich im Namen der Unterordner ein doppelter Bindestrich, wird daraus im Ziel eine Unterordner-Struktur erstellt und das Datum des 1. Fotos eingefügt: aus "Maike--Spree" mit Fotos vom 28.9.2018 wird "Maike\2018-09-28-Spree\"
- Ohne doppelte Bindestriche wird der Unterordnername als Ordnername im Basis-Ordner verwendet
- Der Unterordnername oder der Teil nach dem -- wird als Sessionname verwendet und in den Dateinamen verwendet. Das Aufnamedatum des Bildes wird auch in den Dateinamen kopiert und eine 4-Stellige Nummer angehängt. Also aus Unterordner "Maike--Spree" werden alle Fotos in "Spree-2018-09-28-xxxx.nef" umbenannt
Die Ordnernamen/ Sessionnamen werden vom PowerShell Script ermittelt. Das Anlegen der Ordner, die Umbenennung, das Kopieren und das Schreiben der Exif Kommentare übernimmt das ExifTool.
Die Original Dateien verbleiben an ihrem Quellort und werden nicht manipuliert.
Die Schwierigkeit war eigentlich die Zeichenumwandlung, um den ExifTool Befehl zusammenzubauen.
Verbesserungen:
- Dateien von der Speicherkarte einlesen und die Ordnerstruktur per Eingabeaufforderung abfragen
- Schlüsselwörter von der Eingabeaufforderung abfragen und in die Dateien einfügen (vergesse ich immer ;-))
Das Script findet ihr im Anhang, vielleicht kann es jemand gebrauchen. Baut es gerne um.
Bitte beachtet, dass ich es nicht eingehend auf mögliche Fehlerquellen getestet habe. Speziell, wenn ein Exif-Tag für das Beschreibungsfeld nicht vorhanden ist, wird gar kein Kommentar geschrieben. Der Kopiervorgang sollte aber trotzdem durchgeführt werden.
Verwendung: Den Code unten in eine Textdatei kopieren. Die Endung in .ps1 umbenennen.
ich hab ein PowerShell Script geschrieben, das Fotos von einem Ordner in eine andere Struktur kopiert, die Ordner benennt und die Dateien umbenennt. Ein paar Exif Infos werden aus den Tags ausgelesen und in's Kommentarfeld geschrieben.
Hintergrund: Alle meine Fotos werden aus meinem Foto Ordner direkt in ein Backup geschrieben. Die Fotos kann ich natürlich mit CaptureOne importieren und umbenennen. CaptureOne zeigt mir aber ein paar Exif Infos nicht an (Fokusfeld, VR Einstellung, AF Area Mode, etc...). Wenn ich die Infos nachträglich mit ExifTool in's Kommentarfeld schreibe, würde noch mal der Backup Prozess angestoßen werden.
Das Script macht folgendes:
- Alle Fotos aus den Unterordnern, wo das Script liegt, werden in meinen Fotos Ordner kopiert
- Es gibt einen "Basis-Ordner", mein Fotos Ordner
- Das Script fragt nach einem Unterordner in dem Basisordner, der angelegt wird, falls angegeben
- Befindet sich im Namen der Unterordner ein doppelter Bindestrich, wird daraus im Ziel eine Unterordner-Struktur erstellt und das Datum des 1. Fotos eingefügt: aus "Maike--Spree" mit Fotos vom 28.9.2018 wird "Maike\2018-09-28-Spree\"
- Ohne doppelte Bindestriche wird der Unterordnername als Ordnername im Basis-Ordner verwendet
- Der Unterordnername oder der Teil nach dem -- wird als Sessionname verwendet und in den Dateinamen verwendet. Das Aufnamedatum des Bildes wird auch in den Dateinamen kopiert und eine 4-Stellige Nummer angehängt. Also aus Unterordner "Maike--Spree" werden alle Fotos in "Spree-2018-09-28-xxxx.nef" umbenannt
Die Ordnernamen/ Sessionnamen werden vom PowerShell Script ermittelt. Das Anlegen der Ordner, die Umbenennung, das Kopieren und das Schreiben der Exif Kommentare übernimmt das ExifTool.
Die Original Dateien verbleiben an ihrem Quellort und werden nicht manipuliert.
Die Schwierigkeit war eigentlich die Zeichenumwandlung, um den ExifTool Befehl zusammenzubauen.
Verbesserungen:
- Dateien von der Speicherkarte einlesen und die Ordnerstruktur per Eingabeaufforderung abfragen
- Schlüsselwörter von der Eingabeaufforderung abfragen und in die Dateien einfügen (vergesse ich immer ;-))
Das Script findet ihr im Anhang, vielleicht kann es jemand gebrauchen. Baut es gerne um.
Bitte beachtet, dass ich es nicht eingehend auf mögliche Fehlerquellen getestet habe. Speziell, wenn ein Exif-Tag für das Beschreibungsfeld nicht vorhanden ist, wird gar kein Kommentar geschrieben. Der Kopiervorgang sollte aber trotzdem durchgeführt werden.
Verwendung: Den Code unten in eine Textdatei kopieren. Die Endung in .ps1 umbenennen.
PHP:
$targetBaseDir = "f:\Fotos2\"
$currDir = Split-Path $MyInvocation.MyCommand.Path
$commentCommand = "`"-description`<ShootingMode: ```$ShootingMode; AFAreaMode: ```$AFAreaMode; AFPointsUsed: ```$AFPointsUsed; AF-CPrioritySelection: ```$AF-CPrioritySelection; AFFineTune: ```$AFFineTune; AFFineTuneAdj: ```$AFFineTuneAdj; VR: ```$VibrationReduction`""
Write-Host "Target Sub Dir below $($targetBaseDir): "
$targetSubDir = Read-Host
$sourceSubFolders = get-childitem $currDir -Directory
$sourceSubFolders | %{
$currSourceFolder = $_.FullName
$_.FullName
$files = Get-ChildItem $currSourceFolder -File #-Filter "*.nef"
if($files.Count -ge 1) {
$firstFile = $files[0]
$firstDatetime = Invoke-Expression "& exiftool -d %Y-%m-%d -datetimeoriginal $($firstFile.FullName)"
$folderPrefix = ($firstDatetime.Split(":")[1]).Replace(" ", "")
if($_.Name -like "*--*") {
$sessionName = $_.Name.Split("--")[2]
$sessionFolder = "$($_.Name.Split("--")[0])\$($folderPrefix)-$($sessionName)"
} else {
$sessionName = $_.Name
$sessionFolder = $sessionName
}
if($targetSubDir -ne "") {
$currTargetDir = "$($targetBaseDir)$($targetSubDir)\$($sessionFolder)\"
} else {
$currTargetDir = "$($targetBaseDir)$($sessionFolder)\"
}
$exiftoolCommand = "& exiftool -d %Y-%m-%d `"-FileName<$sessionName-```${datetimeoriginal}%-.4c.%e`" -directory=$($currTargetDir) $($commentCommand) $($currSourceFolder) -o . -charset filename=utf8"
write-host $exiftoolCommand
Invoke-Expression $exiftoolCommand
}
}