Umbenennen von Dateien mit Ordnernamen und Unterordner
Moin Zusammen,
folgendes Problem:
Ich habe einen Ordner.
Nennen wir ihn "Fotos"
In diesem Ordner sind dann Zig Unterordner mit verschiedenen Namen z.B.
"20100925-Malediven"
In diesen Ordnern sind dann ganz viele Bilder die da heißen "IMG_xxx.JPG"
Nun kann es aber auch vorkommen, dass es einen Ordner
"Afrika" gibt und in diesem dann noch weitere Unterornder nach obigem Muster sind, also "20090312-Afrika".
Ich möchte nun gerne ALLE Bilder in den Unterordnern umbenennen in das Format:
"Ordnername_001.jpg"
Wenn noch jemand weiß, wie ich das Erstelldatum auslese und das gleich mit rein basteln kann wäre es super, ansonsten lass ich das von Lightroom machen. Das Erstelldatum soll auch in dem Format "YYYYMMDD" sein.
Ich hab mich natürlich schon dran versucht, aber ich komme mit den Ordnern und Unterordnern nicht zurecht. Die Batch in je ein Verzeichnis zu kopieren ist jetzt nicht so der Hammer :D
Danke im Voraus!
folgendes Problem:
Ich habe einen Ordner.
Nennen wir ihn "Fotos"
In diesem Ordner sind dann Zig Unterordner mit verschiedenen Namen z.B.
"20100925-Malediven"
In diesen Ordnern sind dann ganz viele Bilder die da heißen "IMG_xxx.JPG"
Nun kann es aber auch vorkommen, dass es einen Ordner
"Afrika" gibt und in diesem dann noch weitere Unterornder nach obigem Muster sind, also "20090312-Afrika".
Ich möchte nun gerne ALLE Bilder in den Unterordnern umbenennen in das Format:
"Ordnername_001.jpg"
Wenn noch jemand weiß, wie ich das Erstelldatum auslese und das gleich mit rein basteln kann wäre es super, ansonsten lass ich das von Lightroom machen. Das Erstelldatum soll auch in dem Format "YYYYMMDD" sein.
Ich hab mich natürlich schon dran versucht, aber ich komme mit den Ordnern und Unterordnern nicht zurecht. Die Batch in je ein Verzeichnis zu kopieren ist jetzt nicht so der Hammer :D
Danke im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 278540
Url: https://administrator.de/contentid/278540
Ausgedruckt am: 26.11.2024 um 18:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Xaero,
das gewünschte macht dir folgendes Powershell-Script:
Einfach den RootOrdner in der sich alle anderen Ordner befinden in ersten Zeile angeben und freuen.
Grüße Uwe
das gewünschte macht dir folgendes Powershell-Script:
$folder = 'D:\Urlaubsbilder'
gci $folder -Recurse | ?{$_.PSIsContainer} | %{
$cnt = 1; $dir = $_.Name
gci $_.Fullname -Filter *.jpg | sort CreationTime | %{
rename-item $_.Fullname -NewName "$($dir)_$($_.CreationTime.ToString('yyyyMMdd'))_$($cnt.ToString().PadLeft(3,'0'))$($_.Extension)"
$cnt++
}
}
Grüße Uwe
Hi,
datum muss ich noch reinbasteln, ansonsten kannst du ja mal testen.
Edit: @colinardo mal wieder schneller und eleganter
Grüße,
Tiberius
datum muss ich noch reinbasteln, ansonsten kannst du ja mal testen.
clear-host
$path = "Pfad"
cd $path
$arr = gci $path
foreach ($a in $arr){
$arr2 = gci -Path $path\$a -Recurse
$counter = 0
foreach ($b in $arr2){
$counter = $counter+1
$b | Rename-Item -NewName "$a`_$counter.jpg"
}
}
Edit: @colinardo mal wieder schneller und eleganter
Grüße,
Tiberius
Wäre es nicht möglich dazu ein Tool wie http://www.bulkrenameutility.co.uk/Main_Intro.php zu verwenden?
Damit kannst Du tolle Benennungsmuster erzeugen und diese auf große Datenmengen anwenden.
Damit kannst Du tolle Benennungsmuster erzeugen und diese auf große Datenmengen anwenden.
Zitat von @Xaero1982:
Also im Test hat das so weit funktioniert, aber kannst du mir mal bitte erklären was du da genau machst in der Poweshell?
Das Skript durchläuft alle Unterordner und für jeden Ordner speichert es sich erst mal den Namen in $dir, dann werden alle Bilder in dem Ordner durchlaufen entsprechend den Variablen umbenannt.Also im Test hat das so weit funktioniert, aber kannst du mir mal bitte erklären was du da genau machst in der Poweshell?
Offenbar muss man statt dem Erstelldatum, das Änderungsdatum nehmen? Denn ich habe einfach mal drei Bilder testweise in
irgendwelche Ordner kopiert und dann steht dort das heutige Datum.
Edit: Gut, das Änderungsdatum ist dann auch wieder ein anderes. Gibt es nicht eins, was nicht bei jedem Anfassen
geändert wird?
Das Erstelldatum ändert sich bei mir beim verschieben oder kopieren nicht kann aber je nach System passieren je nachdem was man damit veranstaltet, das Änderungsdatum ändert sich natürlich wenn man das Bild manipuliert.irgendwelche Ordner kopiert und dann steht dort das heutige Datum.
Edit: Gut, das Änderungsdatum ist dann auch wieder ein anderes. Gibt es nicht eins, was nicht bei jedem Anfassen
geändert wird?
Das sicherste ist natürlich das Auslesen des EXIF-Datums bei Bildern wenn sie denn eins enthalten. Das kann ich dir noch einbauen, für das Auslesen der erweiterten Daten einer Datei habe ich hier im Forum schon mal eine Funktion gepostet...
Erweiterte Dateieigenschaften mit Powershell-Funktion abfragen
Hier die Variante die das Exif-Datum ausließt und einbaut:
$folder = 'D:\Urlaubsbilder'
# Funktion für das Auslesen der erweiterten Dateieigenschaften
function Add-ExtendedFileProperties{
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
$fileItem,
[String[]] $PropertyExtended = "ALL"
)
begin
{
$shellObject = New-Object -Com Shell.Application
$itemProperties = $null
}
process
{
if($fileItem.PsIsContainer)
{
$fileItem
return
}
$directoryName = $fileItem.DirectoryName
$filename = $fileItem.Name
$folderObject = $shellObject.NameSpace($directoryName)
$item = $folderObject.ParseName($filename)
if(-not $itemProperties)
{
$itemProperties = @{}
$counter = 0
$columnName = ""
if ($PropertyExtended -eq "ALL"){
#get all properties
do {
$columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
if($columnName) { $itemProperties[$counter] = $columnName }
$counter++
}while($columnName)
}else{
#get user defined properties
do {
$columnName = $folderObject.GetDetailsOf($folderObject.Items, $counter)
foreach($name in $PropertyExtended){
if ($columnName.toLower() -eq $name.toLower()){
$itemProperties[$counter] = $columnName
}
}
$counter++
}while($columnName)
}
}
foreach($itemProperty in $itemProperties.Keys)
{
$fileItem | Add-Member NoteProperty $itemProperties[$itemProperty] `
$folderObject.GetDetailsOf($item, $itemProperty) -ErrorAction `
SilentlyContinue
}
$fileItem
}
}
# Bilder umbenennen
gci $folder -Recurse | ?{$_.PSIsContainer} | %{
$cnt = 1; $dir = $_.Name
gci $_.Fullname -Filter *.jpg | Add-ExtendedFileProperties -PropertyExtended 'Aufnahmedatum' | sort CreationTime | %{
# Exif-Datum von Sonderzeichen befreien die leider oft enthalten sind.
$d = get-date ($_.Aufnahmedatum -replace '[^\d\.:\\ ]','') -F 'yyyyMMdd' -EA SilentlyContinue
# Konnte das Exif-Datum nicht in ein Datumsobjekt umgewandelt werden nehme das Erstelldatum der Datei.
if (!$d){$_.CreationTime.toString('yyyyMMdd')}
# Umbenennung starten
rename-item $_.Fullname -NewName "$($dir)_$($d)_$($cnt.ToString().PadLeft(3,'0'))$($_.Extension)"
$cnt++
}
}
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate