Zur Navigation

Dateien umbenennen

1 uwe

Hallo,
ich will alle Sonderzeichen und Leerzeichen aus den Dateien in einem Verzeichnis umbennenn. Mit folgendem Script läuft es nicht:
Gruss
Uwe

   <?php

$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/"," ");
$replace = Array("ae","oe","ue","Ae","Oe","Ue","ss","_");


$pt = dirname(__FILE__)."/guests";
$fn = scandir($pt);
foreach($fn as $k => $oldname){
  if( $oldname != "." && $oldname != ".." ){
     echo $oldname; // Dateiliste
                                     // datei inhalte werden ausgegeben ..


$dateiname_neu = preg_replace($umlaute, $replace, $oldname);


if (file_exists($dateiname_neu))
      {
      echo 'Verzeichnis "'.$dateiname_neu.'" existiert bereits!';
      die;
      }
   else
      {
      //BENENNT DIE ANGEGEBENE DATEI UM:
      rename($pt."/".$oldname,$pt."/".$dateiname_neu);
//  rename($oldname,$dateiname_neu);
      }

}
}



?>

28.09.2008 15:36

2 Jörg Kruse

Hallo Uwe,

lass dir mal die PHP-Fehlermeldungen anzeigen, dann kommt so etwas:

Warning: preg_replace(): Empty regular expression in /[...]/dateien-umbennen.php on line 15

Das bezieht sich auf das letzte Element von $umlaute, dort fehlen die Slashes:

$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/ /");

28.09.2008 16:08

3 uwe

Hallo Joerg,
danke, jetzt läuft es.
Aber nur manchmal.
Es scheint so, als wenn das Script abbricht wenn eine
Datei schon vorhanden oder.
So sieht es jetzt aus:

Gruss Uwe

  <?php

$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/ /");
$replace = Array("ae","oe","ue","Ae","Oe","Ue","ss","_");


$pt = dirname(__FILE__)."/guests";
$fn = scandir($pt);
foreach($fn as $k => $oldname){
  if( $oldname != "." && $oldname != ".." ){
//     echo $oldname; // Dateiliste
  

$dateiname_neu = preg_replace($umlaute, $replace, $oldname);


if (file_exists($dateiname_neu))
      {
      echo 'Datei "'.$dateiname_neu.'" existiert bereits!';
      die;
      }
   else
      {
      //BENENNT DIE ANGEGEBENE DATEI UM:
      rename($pt."/".$oldname,$pt."/".$dateiname_neu);
$wieviel++ ;
 
      }

}
}

echo $wieviel." Dateien bearbeitet";

?>

28.09.2008 16:44

4 uwe

Hallo,
ich habe es gelöst:

Danke fürs Mitdenken.
  <?php

$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/ /");
$replace = Array("ae","oe","ue","Ae","Oe","Ue","ss","_");


$pt = dirname(__file__)."/guests";
$fn = scandir($pt);
if ($handle = opendir('./guests/')) {
    while (false !== ($oldname = readdir($handle))) {
        if ($oldname != "." && $oldname != "..") {
   //         echo "$oldname\n";

$dateiname_neu = preg_replace($umlaute, $replace, $oldname);


if (file_exists($pt."/".$dateiname_neu))
      {
      echo 'Datei "'.$dateiname_neu.'" existiert bereits!';
echo "<br>";
        }
   else
      {
      //BENENNT DIE ANGEGEBENE DATEI UM:
      rename($pt."/".$oldname,$pt."/".$dateiname_neu);
 echo 'Datei "'.$dateiname_neu.'" ist umbenannt!';
$wieviel++ ;

//  rename($oldname,$dateiname_neu);
      }


}

}
}

echo "<br>";
echo $wieviel." Dateien bearbeitet";

?>

28.09.2008 23:32

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]