stefanie.obermeyer
Goto Top

Batch- oder Perl-Script zur Umbenennung von Dateien nach einer Liste

Hallo und Guten Abend!

Ich habe folgendes Problem und hoffe, dass jemand hier eine Lösung z. B. in Form eines kleinen Scriptes dafür hat.

Betriebssystem ist Windows 7. Ich habe Flac-Dateien in einem Ordner, die nach dem Schema:

01 abcde_0815.FLAC
02 xyz (4711).FLAC
03 ard&zdf.FLAC
04 DFB-is-OK.FLAC
... usw. usf.

völlig willkürlich benannt sind. Maßgeblich sind alleine die beiden Zahlen am Anfang des Dateinamens (Tracknummern).

Im selben Ordner liegt nun eine Textdatei namens "Liste.txt" in der zeilenweise die gewünschten Namen für die einzelnen Dateien angeführt von den Tracknummern aufgelistet sind - etwa so:

01 Supertolles Lied
02 Langweilige Ballade
03 Etwas besseres Lied
04 Mein Lieblingssong
... usw. usf.

Ich möchte nun die Dateien im Ordner gemäß den Namen in Liste.txt umbenennen. Das Zuordnungskriterium sollen hierbei allein die ersten beiden Zeichen (also die Tracknummern) der jeweiligen Namen sein:

"01 abcde_0815.FLAC" soll zu "01 Supertolles Lied.FLAC" werden.
"02 xyz (4711).FLAC" soll zu "02 Langweilige Ballade.FLAC" werden.
"03 ard&zdf.FLAC" soll zu "03 Etwas besseres Lied.FLAC" werden.
"04 DFB-is-OK.FLAC" soll zu "04 Mein Lieblingssong.FLAC" werden.

Ich würde mich freuen, wenn mir hierbei jemand mit einem Batch-Script (oder evtl. auch einem Perl- oder Powershell-Script) weiterhelfen könnte.

Natürlich habe ich schon diverse Tools ausprobiert, aber z. B. mit dem "Ant-Renamer" klickt man sich bei mehreren hundert entsprechenden Ordnern buchstäblich zu Tode. Aus diesem Grund soll es möglichst ein Script sein, dass man dann ggf. auch automatisch aufrufen kann.

In der Hoffung auf freundliche Hilfe und mit bestem Dank im Voraus!

Eure Stefanie

Content-Key: 223122

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

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: 64748
64748 27.11.2013 um 22:44:46 Uhr
Goto Top
Hallo,

am einfachsten ist es, wenn Du aus der Textdatei ein Batch- (oder Linux-Shell)-Skript bastelst.

Kopiere die Ausgabe des Befehls dir (also Du brauchst eine Liste der Dateinamen) und packe sie als Spalte z.B. in eine Excel (oder OpenOffice Calc)-Tabelle.
Dann kopierst Du den Inhalt der Datei Liste.txt in eine andere Spalte der Tabelle, speicherst es als Textdokument (vielleicht csv) ab und dann kannst Du im Editor "suchen und ersetzen" so dass am Ende Zeilen entstehen in der Form
rename "abcde_0815.FLAC" "01 Supertolles Lied.FLAC" 
rename "xyz (4711).FLAC"  "02 Langweilige Ballade.FLAC" 
rename "ard&zdf.FLAC"  "03 Etwas besseres Lied.FLAC" 
rename "DFB-is-OK.FLAC"  "04 Mein Lieblingssong.FLAC" 
Die genaue Syntax musst Du nachgucken.

Das ganze als .bat Datei speichern und laufen lassen. Vorher die Sicherungskopien nicht vergessen.

Wenn ich das in Perl machen müsste, dann würde ich zwei Arrays nehmen, die Nummer beim Lied entspricht der Position im Array und Du kannst in einer Schleife jeden Eintrag im Array1 umbenennen in den Eintrag an der gleichen Position in Array2.

Markus
Mitglied: bastla
bastla 28.11.2013 aktualisiert um 00:34:04 Uhr
Goto Top
Hallo Stefanie und willkommen im Forum!

Sollte sich für einen Ordner etwa so machen lassen (ungetestet):
@echo off & setlocal
set "Ordner=D:\Ordner"  
set "Liste=Liste.txt"  

pushd "%Ordner%"  
for /f "delims=" %%i in ('dir /b *.FLAC') do (  
    for /f %%a in ("%%i") do (  
        for /f "delims=" %%n in ('findstr /b "%%a" "%Liste%"') do echo ren "%%i" "%%n.*"  
    )
)
popd
pause
Wegen des "echo" in Zeile 8 werden die Befehle zum Umbenennen zunächst nur angezeigt - wenn's passt, einfach dieses "echo" weg lassen ...

Wenn alle Unterordner eines Ausgangsordners durchlaufen werden sollen, etwa so:
@echo off & setlocal
set "Ordner=D:\Songs"  
set "Liste=Liste.txt"  

for /d %%o in ("%Ordner%\*") do (  
    pushd "%%o"  
    for /f "delims=" %%i in ('dir /b *.FLAC') do (  
        for /f %%a in ("%%i") do (  
            for /f "delims=" %%n in ('findstr /b "%%a" "%Liste%"') do echo ren "%%i" "%%n.*"  
        )
    )
    popd
)
pause
Grüße
bastla
Mitglied: colinardo
colinardo 28.11.2013 aktualisiert um 08:45:34 Uhr
Goto Top
Hallo Stefanie,
mit Powershell skizziert sähe das so aus:
$fileNewNames = "c:\Liste.txt"  
$pfadDateien = "C:\FLAC"  
$content = gc $fileNewNames
foreach($line in $content){
    if ($line -ne ""){  
      $nr = $line.Split(" ")  
      $newname = "$nr$($line.Substring($nr.Length)).FLAC"  
      gci -Path "$pfadDateien\$nr*.FLAC" | select -First 1 | rename-item -NewName $newname  
    }
}
Grüße Uwe
Mitglied: Endoro
Endoro 28.11.2013 aktualisiert um 05:27:24 Uhr
Goto Top
Hey, Vorschlag mit sed for Windows:
@ECHO OFF &SETLOCAL
set "startfolder=."  
for /d /r "%startfolder%" %%a in (*) do (  
	cd /d "%%~fa"  
	for /f "tokens=1*" %%b in ('dir /b /a-d *.flac 2^>nul') do (  
		sed -nr "/%%~b/s/.*/echo ren \"%%~b %%~c\" \"^&.FLAC\"/ep" "Liste.txt"  
	)
)
ren "01 abcde_0815.FLAC" "01 Supertolles Lied.FLAC"
ren "02 xyz (4711).FLAC" "02 Langweilige Ballade.FLAC"
ren "03 ard03 Etwas besseres Liedzdf.FLAC" "03 Etwas besseres Lied.FLAC"
ren "04 DFB-is-OK.FLAC" "04 Mein Lieblingssong.FLAC"
lg.