Webstatt.org - Community seit 2006 - 2012 (2024?)

Keine Sonderzeichen im Verzeichnisname?

user-343
23.12.2006 15:52

Ich wollte heute meine digitalisierte CD-Sammlung mal reinigen, da, wie ich gemerkt habe, der Dateiname einfach Mist ist. Leider liess sich das im CD-Ripper nicht umstellen, von Hand umzubennen war mir zu doof.
Deshalb dachte ich, ich lasse ein Script rüber rennen. Gesagt getan, getestet, bevor ich sie umbenannt habe, lief wunderbar. Ausser mit bestimmten Verzeichnisnamen, die [Bonus Tracks] im Namen hatte. Die Funktion glob() lieferte damit keine Ergebnisse. Ich hab deshalb einfach die Verzeichnise umbenannt... Die Dateien sind nun alle im "richtigen" Format, wie ich es wollte. Nur intressiert mich trotzdem, wie man das Problem umgehen könnte.

<?php
/**
* Benennt alle von Windows Media-Player kopierte Dateien im Format
* "{$Titelnummer} {$Bandname} {$Titel}"
* um in das Format:
* "{$Titelnummer} - {$Bandname} - {$Titel}"
*
* Wobei die Datei im Musikordner-Root liegen sollte, der Musikordner muss in Stil ./Bandname/Albumname aufgeteilt sein.
*/
$renamedirs = array(
"My Dying Bride" => array(
"A Line of Deathless Kings", // geht
"The Angel and the Dark River [Bonus Tracks]", // Geht so _nicht_
),
);

$i = 0;
foreach($renamedirs as $bandname => $subdirs) {
$i++;
print $bandname."\r\n";

foreach($subdirs as $albumname) {
print "\t".$albumname."\r\n";

$files = glob("D:/".$bandname."/".$albumname."/*.mp3"zwinkern;

$errors = 0;
foreach($files as $filename) {
$dirname = dirname($filename);
$filename = basename($filename);
$oldname = $filename;
$titlenum = substr($filename, 0, 2);
$titlename = substr($filename, strpos($filename, $bandname) + strlen($bandname) +1);
$titlename = str_replace("- ", "", $titlename);
$newname = $titlenum.' - '.$bandname.' - '.$titlename;

//echo "\t\t".$oldname.' => '.$newname."\r\n";
if(rename($dirname.'/'.$oldname, $dirname.'/'.$newname) === false) {
print "\t\tError: Cannot rename $oldname\r\n";
$errors++;
}
}
print "\t\tDone with $errors Errors.\r\n";

print "\r\n";
}

print "\r\n";

/*if($i === 3) {
exit;
}*/
}
?>


Und eine zweite Frage: Ist es Möglich, mit PHP die ID3-Tags auszulesen?

Edit: *selbsthau* Die Zweite Frage hat sich vorerst erledigt... http://de3.php.net/manual/de/ref.id3.php

Avatar user-300
23.12.2006 16:25

Versuches so: "The Angel and the Dark River \[Bonus Tracks\]". Ich nehme an, die [ ] werden als Zeichenklassen interpretiert, daher musst du diese escapen.

user-343
23.12.2006 18:36

Oh... Stimmt, das kann sein. Muss ja fast... Aua.
Gut, lass ich in Zukunft preg_quote drüber laufen, danke lächeln