Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1644to1648
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ordner, Unterordner, Dateien finden und umbenennen

Ordner, Unterordner, Dateien finden und umbenennen
15.09.2018 08:58:36
Andy

Hallo Zusammen,
ich bin auf der Suche nach einer Lösung für folgende Aufgabenstellung.
- ein variabler Ordner (Ordner in der die Excel-Datei liegt)
- mit einer unbekannten Anzahl von Unterverzeichnisebenen und
- einer unbekannten Anzahl von Unterordnern und
- einer unbekannten Anzahl von darin befindlichen Dateien
- sollen nach folgender Vorschrift umbenannt werden:
o in jedem Ordnernamen, Unterordnernamen und Dateiennamen befindet sich ein zu suchender String → Variable: searchstrg
o diese String soll durch ein anderen ersetzt werden → Variable: replacestrg
o der Such- und Ersetzstring sollen variablel belegt werden können.
Gibt es für diese Anforderung schon eine adäquate Lösung.
Vielen Dank im vorab.
Viele Grüße
Andreas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
15.09.2018 09:55:54
Sepp
Hallo Andreas,
der Windows-Explorer muss geschlossen sein.
Modul Modul2
Option Explicit 
 
Sub test() 
  Const cstrInitalPath As String = "D:\Forum\Test" 
  Const cstrSearch As String = "abc" 
  Const cstrReplace As String = "xyz" 
   
  Call renameFilesAndFolders(cstrInitalPath, cstrSearch, cstrReplace) 
End Sub 
 
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String) 
  Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object 
  Dim strNewName As String 
 
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objFolder = objFSO.GetFolder(StartFolder) 
 
  For Each objSFolder In objFolder.SubFolders 
    For Each objFile In objSFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objSFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, sReplace) 
      objFSO.MoveFolder objSFolder.Path, strNewName 
    Else 
      strNewName = objSFolder.Path 
    End If 
    Call renameFilesAndFolders(strNewName, sSearch, sReplace) 
  Next 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
15.09.2018 10:49:53
Andy
Hallo Sepp
vielen Dank.
Es funktioniert einwandfrei.
Grüße
Andreas
AW: Ordner, Unterordner, Dateien finden und umbenennen
18.09.2018 21:46:28
Ete
Hallo Sepp
ich habe den Code oben genutzt und die Ordnerstruktur die umbenannt werden soll über einen Dialog ausgewählt. Dadurch wird allerdings der ausgewählte Ordner sollte er den String enthalten nicht mit umbenannt. Des weiteren erfolgt ebenfalls keine Umbenennung der Dateien in der ersten oberen Ebene!

Option Explicit
Sub renaming()
On Error GoTo Errorhandler1
Dim cstrInitalPath As String
Dim cstrSearch As String
Dim cstrReplace As String
Dim strNewNameMain As String
Dim objMFSO As Object, objMFolder As Object
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Title = "Bitte Ordner wählen"
.InitialFileName = ThisWorkbook.Path
.InitialView = msoFileDialogViewThumbnail
.ButtonName = "select"
If .Show = -1 Then
cstrInitalPath = .SelectedItems(1)
Else: Exit Sub
End If
End With
cstrSearch = frmCOMNO.ldnmb.Value
cstrReplace = frmCOMNO.nwnb.Value
Call renameFilesAndFolders(cstrInitalPath, cstrSearch, cstrReplace)
'Codeschnipsel für den ersten ausgewälten Ordner.
If cstrInitalPath Like "*" & cstrSearch & "*" Then
strNewNameMain = Replace(cstrInitalPath, cstrSearch, cstrReplace)
'MsgBox strNewNameMain
Set objMFSO = CreateObject("Scripting.FileSystemObject")
Set objMFolder = objMFSO.GetFolder(cstrInitalPath)
objMFSO.MoveFolder objMFolder.Path, strNewNameMain
End If
MsgBox "Renaming finalized"
Exit Sub
Errorhandler1:
MsgBox "Error: Please contact SF2T Support."
End Sub
'____________________________________________________
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String)
Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object
Dim strNewName As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(StartFolder)
For Each objSFolder In objFolder.SubFolders
For Each objFile In objSFolder.Files
If objFile.Name Like "*" & sSearch & "*" Then
strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace)
objFSO.MoveFile objFile.Path, strNewName
End If
Next
If objSFolder.Name Like "*" & sSearch & "*" Then
strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch,  _
sReplace)
objFSO.MoveFolder objSFolder.Path, strNewName
Else
strNewName = objSFolder.Path
End If
Call renameFilesAndFolders(strNewName, sSearch, sReplace)
Next
End Sub

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
19.09.2018 22:07:09
Sepp
Hallo Ete,
quick'n dirty.
Modul Modul1
Option Explicit 
  
Sub renaming() 
  Dim strInitalPath As String, strSearch As String, strReplace As String 
  Dim objMFSO As Object, objMFolder As Object 
   
  On Error GoTo Errorhandler1 
 
  With Application.FileDialog(msoFileDialogFolderPicker) 
    .AllowMultiSelect = False 
    .Title = "Bitte Ordner wählen" 
    .InitialFileName = ThisWorkbook.Path 
    .InitialView = msoFileDialogViewThumbnail 
    .ButtonName = "select" 
    If .Show = -1 Then 
      strInitalPath = .SelectedItems(1) 
    End If 
  End With 
 
  If Len(strInitalPath) Then 
    strSearch = "abc" 'frmCOMNO.ldnmb.Value 
    strReplace = "xyz" 'frmCOMNO.nwnb.Value 
 
    Set objMFSO = CreateObject("Scripting.FileSystemObject") 
    Set objMFolder = objMFSO.GetFolder(strInitalPath) 
 
    If Not objMFolder.ParentFolder Is Nothing Then 
      strInitalPath = objMFolder.ParentFolder.Path 
    End If 
 
    Call renameFilesAndFolders(strInitalPath, strSearch, strReplace) 
 
    MsgBox "Renaming finalized" 
  End If 
 
Errorhandler1: 
 
  If Err.Number <> 0 Then MsgBox "Error: Please contact SF2T Support." 
 
  Set objMFSO = Nothing 
  Set objMFolder = Nothing 
End Sub 
 
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String) 
  
  Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object 
  Dim strNewName As String 
  
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objFolder = objFSO.GetFolder(StartFolder) 
  
  For Each objSFolder In objFolder.SubFolders 
    For Each objFile In objSFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objSFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, _
        sReplace) 
      objFSO.MoveFolder objSFolder.Path, strNewName 
    Else 
      strNewName = objSFolder.Path 
    End If 
    Call renameFilesAndFolders(strNewName, sSearch, sReplace) 
  Next 
 
End Sub 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
20.09.2018 07:57:29
Ete
Hallo Sepp,
läuft!! Vielen Dank.
Allerdings quick ist es jetzt nicht mehr.
Durch die zusätzliche Abfrage läuft die Prozedur bis zum Call stark verlangsamt.
Allerdings immer noch besser als 100 Ordner und Dateien von Hand umzubenennen.
Danke für die Hilfe.
AW: Ordner, Unterordner, Dateien finden und umbenennen
20.09.2018 12:24:38
Ete
Hallo Sepp läuft leider doch nicht wie gewünscht.
Also nochmal zu aktuellen Problem bis gestern:
Main Folder ("Test renamer")
-Sub Folder (COMNO)
--Sub Sub Folder (Sub COMNO)
---Sub Sub Sub File (COMNO-2.*)
--Sub Sub File (COMNO-1.*)
-Sub Folder (COMNO-1)
-Sub Folder (COMNO-2)
-Sub File (COMNO.*)
Habe da auch in den Anhang etwas gepackt.
Nun soll wenn ich über mein Auswahlfenster alle Substrukturen inklusive des Auswahlordners umbenannt werden soweit diese den Suchstring enthalten.
Lösung von Vorgestern war, dass in der ersten Subebene die Dokumente nicht umbenannt wurden.
Jetzt benennt er alles in der Ebene wie die Auswahl mit.?
Kannst du da nochmal draufschauen bitte.
Dank dir oder jemand anderen in der VBA community.
Hier die Datei dazu
https://www.herber.de/bbs/user/124103.zip
Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
20.09.2018 18:59:34
Sepp
Hallo Ete,
nur quick!
Modul Modul1
Option Explicit 
 
Sub renaming() 
  Dim strInitalPath As String, strSearch As String, strReplace As String 
   
  On Error GoTo Errorhandler1 
  
  With Application.FileDialog(msoFileDialogFolderPicker) 
    .AllowMultiSelect = False 
    .Title = "Bitte Ordner wählen" 
    .InitialFileName = ThisWorkbook.Path 
    .InitialView = msoFileDialogViewThumbnail 
    .ButtonName = "select" 
    If .Show = -1 Then 
      strInitalPath = .SelectedItems(1) 
    End If 
  End With 
  
  If Len(strInitalPath) Then 
    strSearch = frmCOMNO.ldnmb.Value 
    strReplace = frmCOMNO.nwnb.Value 
    Call renameFilesAndFolders(strInitalPath, strSearch, strReplace) 
    MsgBox "Renaming finalized" 
  End If 
  
Errorhandler1: 
  
  If Err.Number <> 0 Then MsgBox "Error: Please contact SF2T Support." 
  
End Sub 
  
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String) 
  Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object 
  Dim strNewName As String 
   
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objFolder = objFSO.GetFolder(StartFolder) 
   
  For Each objSFolder In objFolder.SubFolders 
    For Each objFile In objSFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objSFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, _
        sReplace) 
      objFSO.MoveFolder objSFolder.Path, strNewName 
    Else 
      strNewName = objSFolder.Path 
    End If 
     
    For Each objFile In objFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objFolder.ParentFolder.Path & "\" & Replace(objFolder.Name, sSearch, _
        sReplace) 
      objFSO.MoveFolder objFolder.Path, strNewName 
    End If 
    Call renameFilesAndFolders(strNewName, sSearch, sReplace) 
  Next 
  Set objFSO = Nothing 
  Set objFolder = Nothing 
  Set objSFolder = Nothing 
  Set objFile = Nothing 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
21.09.2018 12:43:06
Ete
Hi Sepp,
danke für deine Rückmeldung. Nun ist es leider so, dass dein Code nur funktioniert, wenn der erste ausgewählte Ordner also die Zieldatei den Suchstring enthält. Dieser wird auch umbenannt. Der Auswahlordner nun den Suchstring nicht enthält ergibt sich eine Fehlermeldung.
Des Weiteren funktioniert er lediglich in den Ordnern, wo Unterordner bzw. Dokumente liegen.
Ich habe versucht mich durch deine Folder und Subfolder struktur zu arbeiten aber komme da nicht weiter. Vielleicht, könntest du mit Kommentaren in deinem Code helfen. Vielleicht komme ich dann selbst auf die Lösung.
Grüße
Ete
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige