Seite 1 von 1

Dateien umbenennen läuft immer aus dem Ruder

Verfasst: 02.10.2014 02:09
von Delle
Hallo,

der folgende Code soll alle MP3-Dateien im gleichen Ordner umbenennen, genauergesagt lediglich die ersten 4 Zeichen bei jedem Dateinamen entfernen:

Code: Alles auswählen

If ExamineDirectory(0, GetCurrentDirectory()+"\","*.mp3")

    Repeat 
      
      FileType = NextDirectoryEntry(0) 
       
       If FileType 
       
          Debug DirectoryEntryName(0)
          Debug "NEW: "+Right(DirectoryEntryName(0),Len(DirectoryEntryName(0))-4)
          
          RenameFile(GetCurrentDirectory()+DirectoryEntryName(0), GetCurrentDirectory()+Right(DirectoryEntryName(0),Len(DirectoryEntryName(0))-4))
          
       EndIf 
       
       
    Until FileType = 0 
    
  
EndIf 

FinishDirectory(0)
Das läuft teilweise zwar ganz gut, beim Großteil der Dateien entfernt er aber anscheinend mehrfach die ersten 4 Zeichen.

Es bleiben meistens nur verkrüppelte Dateinamen zurück :-(

Ich schätze mal der Fehler liegt irgendwie in der Schleife? Also das bereits geänderte Dateien noch durchlaufen werden oder so?

Re: Dateien umbenennen läuft immer aus dem Ruder

Verfasst: 02.10.2014 07:07
von Bisonte
Evt. liegt das daran, dass Du direkt umbenennst, obwohl das Verzeichnis noch nicht komplett eingelesen wurde,
und somit würdest Du ein File mehrmals umbenennen.

Versuche mal die Variante, erst alle Filenamen in eine LinkList einzulesen und danach in einer ForEach - Next Schleife
die Dateioperation auszuführen.

Edit: so ungefähr ....

Code: Alles auswählen

Procedure MP3_Renamer(Directory.s)
  
  Protected NewList File.s()
  Protected d, String.s
  
  If Right(Directory, 1) <> "\" : Directory + "\" : EndIf ; Für Windows
  
  d = ExamineDirectory(#PB_Any, Directory, "*.mp3")
  
  If d
    While NextDirectoryEntry(d)
      If DirectoryEntryType(d) = #PB_DirectoryEntry_File
        AddElement(File()) : File() = DirectoryEntryName(d)
      EndIf
    Wend
    FinishDirectory(d)  
  EndIf
  
  ForEach File()
    RenameFile(Directory + File(), Directory + Mid(File(), 5))  
  Next
  
  
EndProcedure