Dateieen umbenennen mit VBA oder *.bat ?

Hi Folks !
Ich denke ich habe so ziemlich alles erdenkliche versucvht und mich in diversen Foren schlauer geleden, doch leider brachte bislang alles nicht den gewünschten Erfolg. zum Thema:
Ich möchte mit einem VBA Makro oder ggf. auch per Batch-Datei mehrere Dateien in einem Verzeichnis wie „C:\Test“ auf 1 mal umbenennen.
Die Dateiien habe alle unetrschiedliche Dateiendungen und sollen diese auch behalten. Auch haben die Dateeien unter Umständen Leerzeichen im Dateinamen. In nachgefolgendem Bsp habe ich mal versucht zu zeigen wie das ganze aussehen soll. Idealerweise lässt sich im Makro der jeweilige Verszeichnispfad auch auswählen(…so weit war ich schon…:smile:…).
!! Ich bin mir im klaren darüber das es auch Progs gibts die soetwas lösen, doch damit ist mir auch div. grün den leider nicht geholfen!! Ich hoffe daher stark auf Eure geschätzte Mithilfe !!
zum Bsp:
____________________________
|ist:expressionless:
C:\Test\Mustermann.xls
C:\Test\Bild.bmp
C:\Test\sound.wav
|soll:expressionless:
C:\Test\2010-11-11 Mustermann.xls
C:\Test\2010-11-11 Bild.bmp
C:\Test\2010-11-11 sound.wav
___________________________________
Die Dateierweiterung muss nicht generiert werden aus dem aktuellen Datum, sollte aber x-beliebig eigegeben werden können, ehe dieses Format allen dateien im Verzeichnis voran gestellt wird.

Ich hoffe mich verständlich ausgedrückt zu haben und erwarte schon jetzt gespannt auf Eure geschätzten antworten!!!
vielen Dank voarb
Gruesse
redfury

Die Dateiien habe alle unetrschiedliche Dateiendungen und
sollen diese auch behalten. Auch haben die Dateeien unter
Umständen Leerzeichen im Dateinamen. In nachgefolgendem Bsp
habe ich mal versucht zu zeigen wie das ganze aussehen soll.
Idealerweise lässt sich im Makro der jeweilige
Verszeichnispfad auch auswählen(…so weit war ich
schon…:smile:…).

Hallo Fury,

Alt+F11, Einfügen—Modul, nachstehenden Code reinkopieren.
Extras—Verweise, Verweis auf „Microsoft Scripting Runtime“ anhaken.
VB-Editor schließen.

Starten von „Dateilisten“ mit Alt+F8.

Anpassen des Codes:

Hier den Pfad angeben:
Const Pfad As String = „C:\test“

Hier wählst du durch True/False aus ob Unterverzeichnisse auch bearbeitet sollen.
For Each Datei In GetFiles(Pfad, False)
Die Funktion „Getfiles“ hat einen dritten Parameter mit dem legst du die zu suchende Dateiendung fest. Wie im Code an der auskommentierten Codezeile ersichtlich. Oder läßt den dritten Parameter wie hier einfach weg, dann werden alle Endungen gesucht.

Teste den Code in einer neuen leeren Mappe. Derzeit benennt er noch nix um, er listet im Blatt nur auf wie das aussehen würde.
Teste halt mal den Code,

Gruß
Reinhard

Option Explicit

' Achtung!
' --\> Microsoft Scripting Runtime - Verweis notwendig!
Sub Dateilisten()
Dim Datei As File, Zei As Long, Eing As String
Const Pfad As String = "C:\test"
Application.ScreenUpdating = False
Eing = InputBox("Präfix eingeben", "Präfixauswahl", Format(Date, "yyyy-mm-dd"))
If Eing = "" Then Exit Sub
'For Each Datei In GetFiles(Pfad, False, "\*.xls")
Range("A:B").ClearContents
For Each Datei In GetFiles(Pfad, False)
 Zei = Zei + 1
 Cells(Zei, 1) = Pfad & "\" & Datei.Name
 Cells(Zei, 2) = Pfad & "\" & Eing & " " & Datei.Name
Next
Range("A:B").EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
'
Public Function GetFiles(FolderPath As String, scanSubDirectorys As Boolean, Optional \_
SearchPattern As String, Optional SortBy As String) As Collection
 ' Die MSR - Objekte
 Dim objFs As New FileSystemObject
 Dim objRootFolder As Folder
 Dim objSubFolder As Folder
 Dim objFile As File
 ' Zwischenspeicher für den Rückgabewert der Funktion
 Dim HColl As New Collection
 Set HColl = Nothing
 ' Wenn kein Suchmuster angegeben alle Dateien zurückliefern
 If SearchPattern = "" Then SearchPattern = "\*"
 ' Das Ordner-Objekt für den angegebenen Pfad laden
 On Error GoTo err01
 Set objRootFolder = objFs.GetFolder(FolderPath)
err01:
 If Err.Number 0 Then
 Set GetFiles = HColl
 Exit Function
 End If
 ' Alle Dateien in diesem Ordner durchlaufen
 For Each objFile In objRootFolder.Files
 ' Wenn das Suchmuster übereinstimmt Datei der Collection hinzufügen
 If objFile.Name Like SearchPattern Then
 HColl.Add objFile
 End If
 Next
 ' Wenn angegeben, die Unterordner des Startpfades durchlaufen
 If scanSubDirectorys Then
 For Each objSubFolder In objRootFolder.SubFolders
 ' Alle per Rekursion zurückgelieferten Dateien der Hilfscollection hinzufügen
 For Each objFile In GetFiles(objSubFolder.Path, scanSubDirectorys, SearchPattern)
 HColl.Add objFile
 Next
 Next
 End If
 ' Wenn angegeben, die Hilfs-Collection sortieren
 If SortBy "" Then
 Set HColl = SortItemCollection(HColl, SortBy)
 End If
 ' Rückgabewert
 Set GetFiles = HColl
End Function
'
Public Function SortItemCollection(col As Collection, strPropertyName) As Collection
 Dim colNew As Collection
 Dim objCurrent As Object
 Dim objCompare As Object
 Dim lngCompareIndex As Long
 Dim variantCurrent As Variant
 Dim variantCompare As Variant
 Dim blnGreaterValueFound As Boolean
 'make a copy of the collection, ripping through it one item
 'at a time, adding to new collection in right order...
 Set colNew = New Collection
 For Each objCurrent In col
 'get value of current item...
 variantCurrent = CallByName(objCurrent, strPropertyName, VbGet)
 'setup for compare loop
 blnGreaterValueFound = False
 lngCompareIndex = 0
 For Each objCompare In colNew
 lngCompareIndex = lngCompareIndex + 1
 variantCompare = CallByName(objCompare, strPropertyName, VbGet)
 'die Vergleichstypen auf Variant geändert, somit können beliebige Datentypen \_
miteinander verglichen werden
 If variantCurrent 

Hallo Reinhard,

so rein aus dem Bauchgefuehl heraus und ohne gross den Source zu studieren, fliegst du da bei einem OS alla Windows7 mächtig gewaltig auf die Gusche :confused:

Seit Windows7 kannst du nicht mehr so einfach die Dateien ermitteln :frowning:
Ich bin da auch schon arg ins schleudern gekommen :s
Probiere mal das Script unter Windows7 aus mit dem Pfad C:\

MfG Alex

Hallo redfury,

hier noch eine Lösung. Sie ist zwar nicht so feudal wie die von Reinhard mit Unterverzeichnissen usw., funktioniert aber auch (ab Excel2003).
Hier der Download-Link:
http://www.file-upload.net/download-3145018/Umbenenn…

Wenn du die Datei startest, erscheint eine Userform.
In das Feld „Verzeichnis“ kannst du von Hand nichts eintippen (um Tippfehler zu vermeiden. Mit dem Button rechts daneben kannst du ein Verzeichnis auswählen, dass dann dort angezeigt wird.
In das Feld „Vorsatz zu Dateinamen“ kannst du dein Präfix (ohne das folgende Leerzeichen) eingeben.
Mit dem Button „Umbenennen“ startest du die Aktion.
Mit dem Button „Zurück“ kannst du es rückgängig machen.

Gruß, Andreas

Hi Reinhard !
Unter meiner Excel Version 2000 funktioniert die von Dir gezeigte Variante sehr gut. Vielen Dank schon einmal dafür !!
Nun versuche ich verzweifelt möglichst mit der „name“ Funktion über einen zusätzlichen Button Excel/VBA dazu anzuweisen die gelisteten Dateien in „B“ auch wie aufgezeigt umzubenennne. Doch das will noch nicht so recht… Gibt es da evtl. ne einfache Lösund auf die ich nicht komme ?
Das von A. gezeigte Beispiel funzt lieder nicht, da ich eben 2000 nutze. Idel wäre da natürlich auch wenn ich einfach mittel StrgC und StrgV mir den betreffenden umzubenennenden Pfad in eine Userform reinkoieren könnte, welche dann autom. bearbeitet wird…Fragen über Fragen… :smile:
Danke vorab
Gruß
rf

Hi Andreas !

Der Aufbau und der grundsätzliche Lösungsansatz deiner Datei ist echt klasse und im Prinzip auch exact das was ich suche, nur leider bin ich gebunden Excel 2000 zu nutzen und da bekomme ich die typischen Laufzeitfehler… :frowning:
Gäbe es nicht auch eine möglichkeit den betreffenden Pfad einfach rein zu kopieren damit eben dieser dann verarbeitet wird ?
Dank vorab
Gruß
redfury

Hallo redfury,

ich hab die Datei noch mal etwas geändert: Du kannst jetzt den Ordnernamen selber eingeben bzw. mit Cut and Paste in das Feld reinkopieren. Das müsste das sein, was du wolltest.
Link:
http://www.file-upload.net/download-3164823/Umbenenn…

Gruß, Andreas

Hi again !

Tausend Dank das funktioniert exact so wie von mir gedacht, warum aber kann ich ausschliesslich nur die Dateien im Lw C:\ ändern ? ein ändern von Dateien in anderen FP Lokal oder mobil ist ebenso wenig möglich wie meine Netzwerklaufwerke. Woran könnte das liegen ?
Gruß
red.

Hallo nochmal,

hier jetzt die 3. Version:
http://www.file-upload.net/download-3177523/Umbenenn…
Mit allen lokalen Laufwerken funktioniert sie jetzt problemlos. Ob es auch mit Netzlaufwerken geht, konnte ich noch nicht testen. Rückmeldung wäre gut.

Gruß, Andreas