lexura
Goto Top

Dateinamen mit Powershell umbenennen ???

Hallo,

Ich benötige ein Script mit dem ich eine MP3 Sammlung umbenennen kann. Die Dateien lauten im Ursprung alle so:

012-bakermat_-_one_day_(vandaag)_(radio_edit)
013-alle_farben_feat_graham_-_she_moves_(far_away)

usw.

Am Ende sollen die Dateien wie folgt aussehen:

Bakermat - One Day (Vandaag) (Radio Edit)
Alle Farben (Feat. Graham) - She Moves (Far Away)

Es sollen also alle unterstriche entfernt werden, die Ziffern vorne sollen weg, Der featuring Interpret soll in Klammern sein und jedes Wort soll mit einem Großbuchstaben anfangen.

bislang habe ich folgendes Script erstellt und damit die folgende Lösung bereits hinbekommen.

Script:

Get-ChildItem "D:\MUSIK\*.mp3" | Rename-Item -NewName {$_.Name -replace '_' , ' '}
Get-ChildItem "D:\MUSIK\*.mp3" | Rename-Item -NewName {$_.Name -replace ' and ' , ' & '}
Get-ChildItem "D:\MUSIK\*.mp3" | Rename-Item -NewName {$_.Name -replace 'feat' , '(Feat.'}
Get-ChildItem "D:\MUSIK\*(Feat.*.mp3" | Rename-Item -NewName {$_.Name -replace ' - ' , ') - '}
Get-ChildItem "D:\MUSIK\*.mp3" | Rename-Item -NewName {$_.Name.Substring(4)}


Ergebnis:

bakermat - one day (vandaag) (radio edit)
alle farben (Feat. graham) - she moves (far away)

Mir fehlt also nur noch die der Großbuchstabe am Anfang jedes Wortes. Kann mir da jemand Unterstützung geben und / oder auch evtl das Script verfeinern / anpassen / professioneller machen ??? Bin blutiger Anfänger was powershell anbelangt.

DANK im voraus.

Gruß lexura

Content-ID: 241914

Url: https://administrator.de/forum/dateinamen-mit-powershell-umbenennen-241914.html

Ausgedruckt am: 23.04.2025 um 07:04 Uhr

colinardo
Lösung colinardo 26.06.2014 aktualisiert um 18:19:47 Uhr
Goto Top
Hallo lexura,
probier das mal:
$files = dir "D:\Musik\*.mp3"  
foreach($file in $files){
    # ersetzen von underscores, 'and' und Zahlen am Anfang 
    $newname = ($file.Basename.replace("_"," ").replace(' and ','&') -replace '^\d*-?','')  
    # große Anfangsbuchstaben
    $newname = [regex]::Replace($newname,'\b([a-z])\w+',{param($m) ($m.Groups[1].Value.toUpper()+$m.Value.Substring(1))})  
    # wenn 'feat' vorkommt ... 
    if($newname -match '\bfeat'){  
        $newname = $newname -Replace '(feat)(.*?) -','($1.$2) -'  
    }
    $newname = $newname + $file.Extension
    write-host $file.Name" ==> " -NoNewline -ForegroundColor Red; write-host $newname -ForegroundColor Green  
    rename-item $file.FullName $newname
}
Grüße Uwe
lexura
lexura 26.06.2014 um 13:10:33 Uhr
Goto Top
Hallo Uwe,
besten Dank. Dein Script ist perfekt !!! Genau so muss ich das Ergebnis haben.

Gruß lexura

P.S. hammer, wie schnell man hier zu einer SUPER Lösung kommt.