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-Key: 241914

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

Printed on: April 16, 2024 at 16:04 o'clock

Member: colinardo
Solution colinardo Jun 26, 2014 updated at 16:19:47 (UTC)
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
Member: lexura
lexura Jun 26, 2014 at 11:10:33 (UTC)
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.