lexus_mod: Alle Dateien im Verzeichnis umbennen

Hallo,
ich versuche alle Dateien die sich innerhalb eines Verzeichnisses befinden umzubenennen.

Was ich nicht ganz verstehe ist, wenn ich den Befehl rename
rename(bilder/29416.jpg, bilder/F_29416.jpg) ohne die while ausführe dann klappts.

z.B.
oldname = 05537.jpg
newname = F_05537.jpg

Warning: Rename failed (File exists) in D:\_htdocs\read_file\file.php on line 9
Datei 05537.jpg gefunden

Warning: Rename failed (File exists) in D:\_htdocs\read_file\file.php on line 9
Datei 29416.jpg gefunden

Warning: Rename failed (File exists) in D:\_htdocs\read_file\file.php on line 9
Datei 29593.jpg gefunden

<?php
$handle=opendir ('bilder/');
echo "Verzeichnis-Handle: $handle <br>";
echo "Dateien:\n";

while ( $file = readdir ( $handle ) ) {
if( $file == "." or $file == "..") {
    }else{
     if ( rename( $handel.$file, $handel."F_".$new ) ) {
         echo "Datei $file nicht gefunden <br>";
         } else {
           echo "Datei $file gefunden <br>";
           }
  }
} closedir( $handle );
?>

  1. while ( $file = readdir ( $handle ) ) {

    Ist die Divergenz $handle oben < -- > $handel unten gewollt?

    if ( rename( $handel.$file, $handel."F_".$new ) ) {

  2. Hallo,

    while ( $file = readdir ( $handle ) ) {
    if( $file == "." or $file == "..") {
        }else{
         if ( rename( $handel.$file, $handel."F_".$new ) ) {

    ein kleiner Buchstabendreher: $handle <> $handel

    Schönen Gruß aus Bilk

    Rainer

    1. oh, sorry,
      nein das ist ein tippfehler.

      Das klappt aber immer noch nicht!
      Jetzt erstellt das php in dem Verzeichnis eine Datei F_, die Dateien die eigentlich umbenannt werden sollen sind unverändert

      <?php
      $handle=opendir ('bilder/');
      echo "Verzeichnis-Handle: $handle <br>";
      echo "Dateien:\n";

      while ( $file = readdir ( $handle ) ) {
      if( $file == "." or $file == "..") {
          }else{
           if ( rename( "bilder/".$file, "bilder/F_".$new ) ) {
               echo "Datei $file nicht gefunden <br>";
               } else {
                 echo "Datei $file gefunden <br>";
                 }
         }
      } closedir( $handle );
      ?>

      1. Hallo,

        Jetzt erstellt das php in dem Verzeichnis eine Datei F_, die Dateien die eigentlich umbenannt werden sollen sind unverändert

        Du hast vergessen, $new einen Wert zuzuweisen.

        if ( rename( "bilder/".$file, "bilder/F_".$new ) ) {

        Schönen Gruß aus Bilk

        Rainer

        1. jo, ich habe $new durch $file ersetzt, jetzt klapps auch:)
          Ich hatte sonst nicht gewusst wie ich auf die schnelle 6000 Bilder in F_xxxxxx.jpg umbenennen sollte.

          nen dickes Danke an alle

          lexus_mod

          1. gudn tach!

            Ich hatte sonst nicht gewusst wie ich auf die schnelle 6000 Bilder in F_xxxxxx.jpg umbenennen sollte.

            dafuer gibt's auch schon fertige tools.
            z.b. ren_ext.pl

            prost
            seth

  3. Hello,

    Hallo,
    ich versuche alle Dateien die sich innerhalb eines Verzeichnisses befinden umzubenennen.

    Was ich nicht ganz verstehe ist, wenn ich den Befehl rename
    rename(bilder/29416.jpg, bilder/F_29416.jpg) ohne die while ausführe dann klappts.

    z.B.
    oldname = 05537.jpg
    newname = F_05537.jpg

    Warning: Rename failed (File exists) in D:\_htdocs\read_file\file.php on line 9
    Datei 05537.jpg gefunden

    Warning: Rename failed (File exists) in D:\_htdocs\read_file\file.php on line 9
    Datei 29416.jpg gefunden

    Warning: Rename failed (File exists) in D:\_htdocs\read_file\file.php on line 9
    Datei 29593.jpg gefunden

    Dass das Script in der hier bisher geposteten Version überhaupt funktioniert, beweifele ich.
    Du hast in einem Verzeichnis die namen besorgt, und in einem anderen die Umbenennung durchgeführt.

    <?php

    $dirname = ('bilder/');

    $handle = opendir ($dirname);
    echo "Verzeichnis-Handle: $handle <br>";
    echo "Dateien:\n";

    while ( $file = readdir ( $handle ) )         ## Zugriff erfolgt über Verzeichnishandle
    {
      if(is_file($dirhandle.$file))               ## der qualifizierte Bezeichner wird benötigt
      {
    #    if ( rename( $handle.$file, $handle."F_".$new ) )    ## Was sollte das eigentlich?
        if ( rename( $dirname.$file, $dirname."F_".$new ) )  ## Zugriff erfolgt über Namen!
        {
          echo "<p>Datei $file gefunden unf umbenannt</p>";
        }
        else
        {
           echo "<p>Datei $dirname.$file nicht gefunden </p>";
        }
      }
    }
    closedir( $handle );
    ?>

    Diese Konstruktion oben ist nun zwar schon "richtiger" als Deine, aber immer noch falsch.
    Sie könnte nämlich ggf. (das kommt auf das OS an) eine Rekursion erzeugen, und damit in eine Endlosschliefe führen.

    Für Umbenennungen ganzer Verzeichnisinhalte sollte man daher auf jeden Fall mit Snapshots und nicht mit Dynasets arbeiten. Also erst die Liste der Dateien besorgen und dann nach der Liste vorgehen.

    Und schau Dir mal die Funktion glob() an, die aber auch schon wieder andere Fallen enthält, da sie nicht nur den Dateinamen zurückliefert, sondern den gesamten relativen oder qualifizierten Bezeichner. Damit kann man dann wieder nicht so einfach umbenennen, wie mit readdir().

    http://de.php.net/manual/de/function.glob.php

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hello,

      Und natürlich noch was falsch...

      <?php

      $dirname = ('bilder/');

      $handle = opendir ($dirname);
      echo "Verzeichnis-Handle: $handle <br>";
      echo "Dateien:\n";

      while ( $file = readdir ( $handle ) )         ## Zugriff erfolgt über Verzeichnishandle
      {

      if(is_file($dirname.$file))                 ## der qualifizierte Bezeichner wird benötigt

      {
      #    if ( rename( $handle.$file, $handle."F_".$new ) )  ## Was sollte das eigentlich, ein

      ## Handle und einen Namen zu kombinieren?

      if ( rename( $dirname.$file, $dirname."F_".$new ) ) ## Zugriff erfolgt über Namen!
          {
            echo "<p>Datei $file gefunden und umbenannt</p>";
          }
          else
          {
             echo "<p>Datei $dirname.$file nicht gefunden </p>";
          }
        }
      }
      closedir( $handle );
      ?>

      Nur, falls noch jemand später reinguckt...

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau