Dateien trotz verschiedener IDs umbenennen!

Hannibal

Erfahrenes Mitglied
Hallo ich habe viele Dateien in einem Ordner, alles Jpeg Dateien welche folgendermassen benannt sind:

streetthumb_999.jpg
streetthumb_998.jpg

etc.

Zudem liegen in dem Ordner noch dateien welche folgendermassen heissen:

thumb_1.jpg
thumb_2.jpg

Die IDs in den Dateien überschneiden sich nicht, nur dass bei ca. 1000 Dateien der name geändert werden sollte.

Nun möchte ich ein Script machen welches bei den Files welche nur "thumb_xxx.jpg" heissen, noch "street" vornedran hängt.

Könnte mir jemand dabei behilflich sein?

Gruss :)
 
ok was du brauchst ist opendir() readdir().
Damit machst du erstmal ne schleife und liest alle Dateien entsprechender verzeichnisse ein.
Beispiele dazu müssten hier, ansonsten auch in den Userkommentaren auf http://de.php.net zu finden sein unter den funktionen (s.o.).
Dann baust du dir in der Schleife eine Bedingung anhand des Namens, entweder per Rgex oder per Substr() feststellen. Trifft die Bedingung zu einfach ein rename() (oder so) oder eben via Backticks `` bzw system() einen Linux / Windows konsolen befehl zum umbenennen absetzen.
 
Hmm Ok.

Also ich muss mal schauen wie ich den ordner aufmache, davon hab ich wirklich noch keine Ahnung.

Dann hab ich gedacht könnte man nach dem _ suchen und bei jedem file fix streetthumb vornedran schreiben, so muss ich nicht zuviel überlegen beim Code! :D
 
Habe mir nun aus dem Forum etwas rausgesucht welches mir schön alle Dateinamen ausliest, nun muss ich aber vorsichtig sein, dass ich beim Rename nicht alle Dateien überschreibe oder gar gleich benenne.

Ich muss nun auf etwas im Namen suchen und bis dort ersetzen:

PHP:
function listdir($path=".")    
{
    $dir = dir($path);
    $files=array();
    while($file=$dir->read())
    {
        if($file!="." && $file!="..")
        {
            array_push($files, $file);
        }
    }
    $dir->close();
    return $files;
}

//Hier der Aufruf der Funktion und die Ausgabe des Arrays, der vond er Funktion zurückgegeben wird.
$file=listdir();
foreach($file as $filename)
{
    echo $filename."<br>"; //hier kann ich nun rename :)
}
 
hmm ja.

Ich möchte aber ja bis zum _ ersetzen und zwar egal ob 3 Zeichen vor dem _ sind, oder ob das nun 10 Zeichen sind.

Darum kann ich ja nicht einfach die Position im String angeben.

:(
 
Danke, aber ich stell mich im Moment wiedermal sowas von dumm an, dass ich natürlich nichts zum laufen bekomme :-(
 
warum, was geht denn nicht?
einfach substr() von $file, ab dem punkt wo strpos den _ findet, also so

PHP:
if($file!="." && $file!="..")
 {
   //Warum denn in ein array pushen und dazu noch mit array_pusch? $arraname[] geht auch
   //array_push($files, $file);
   
  //Wenn substr($file, 0, strpos()-1 dem String "thumb" entpsircht umbenennen
  //ansonsten NUll in $status speichern.
  //da rename FALSE bei Fehler zurückliefert, kann es zu fehlerprüfung benutz werden wenngewünscht...
  //@ unterdürckt PHPs Warnin o.ä.
  $status = (substr($file, 0, strpos()-1) == 'thumb')?(@rename($file,'street'.$file):(NULL);

  //ggf Fehler abfragen
  if( $status === FALSE )
           echo $file.' konnte nicht in >street'.$file.' umbenannt werden<br>';
   
 }
 

Neue Beiträge

Zurück