Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dateien in Ordner umbenennen

Dateien in Ordner umbenennen
18.05.2008 20:41:00
Peter
Guten Tag
Ich habe verschiedene Ordner mit einer grösseren Anzahl Dateien i.d.R. nicht xls). Nun möchte ich pro Ordner die Dateinamen mit einer dreistelligen Zahl ergänzen (also die Dateien umbenennen). Dabei möchte ich jeweils die erste Zahl eingeben können, dann wird die Zahl immer um eine 1 erhöht.
Beispiel
Dateinamen alt:
aöla
asjf
aldjfölksjdfö
kdfjkjö
Dateinamen neu:
aöla 001
asjf 002
aldjfölksjdfö 003
kdfjkjö 004
Wer kann mir hier weiterhelfen?
Danke, Peter

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien in Ordner umbenennen
18.05.2008 21:21:06
Daniel
HI
das ist jetzt aber nicht zwingend ein Excel-Problem oder?
wenn alle Dateien eines Ordners umbenannt werden sollen, könnte es so funktioneren, du brauchst die DIR()-, NAME_AS_- und ein paar text-Funktionen:
Funktioniert so aber nur, wenn alle Dateien ne 3-stellige Dateiendung haben.
falls Unterverzeichnisse vorkommen, schau dir lieber nochmal die Hilfe zur DIR-Funktion an, damit diesese nicht auch umbenannt werden.

Sub Umbenennen()
Dim Pfad As String
Dim Nr As Integer
Dim Datei As String
Dim NameNeu As String
Pfad = "C:\DeinPfad\"
Datei = Dir(Pfad)
Do Until Datei = ""
Nr = Nr + 1
NameNeu = Pfad
NameNeu = NameNeu & Left(Datei, Len(Datei) - 4)
NameNeu = NameNeu & Format(Nr, " 000")
NameNeu = NameNeu & Right(Datei, 4)
Name Pfad & Datei As NameNeu
Loop
End Sub


Gruß, Daniel
PS nicht getestet

Anzeige
korrektur
18.05.2008 21:23:44
Daniel
sorry hab noch was vergesen:

Sub Umbenennen()
Dim Pfad As String
Dim Nr As Integer
Dim Datei As String
Dim NameNeu As String
Pfad = "C:\DeinPfad\"
Datei = Dir(Pfad)
Do Until Datei = ""
Nr = Nr + 1
NameNeu = Pfad
NameNeu = NameNeu & Left(Datei, Len(Datei) - 4)
NameNeu = NameNeu & Format(Nr, " 000")
NameNeu = NameNeu & Right(Datei, 4)
Name Pfad & Datei As NameNeu
 Datei = Dir()
Loop
End Sub


AW: korrektur
18.05.2008 21:28:00
Herbert
Hi,
sehr optimistisch, davon auszugehen, dass die Extension aus 4 Zeichen besteht.
mfg Herbert

Anzeige
AW: korrektur
18.05.2008 21:34:33
Daniel
Hi
tun sie ja auch fast immer (bei mir auf dem Rechener zumindest)
aber du darfst meinen Vorschlag ruhig für eine flexible Extensionszeichenanzahl optimieren, ich lerne gern dazu.
Gruß, Daniel

AW: korrektur
18.05.2008 21:37:34
Ramses
Hallo Herbert
Das dachte ich mir auch gerade, vor allem im Hinblick auf E2007 und sonstige neue Dateien.
Daher mein Vorschlag
Option Explicit

Sub Umbenennen()
    Dim Pfad As String
    Dim Nr As Integer
    Dim myExt As Integer
    Dim Datei As String
    Dim NameNeu As String
    Pfad = "C:\Data\"
    Datei = Dir(Pfad)
    Do Until Datei = ""
        Nr = Nr + 1
        NameNeu = Pfad
        myExt = InStrRev(Datei, ".", -1)
        NameNeu = NameNeu & Left(Datei, Len(Datei) - myExt)
        NameNeu = NameNeu & Format(Nr, "0000")
        NameNeu = NameNeu & Right(Datei, 4)
        Name Pfad & Datei As NameNeu
        Datei = Dir(Pfad)
    Loop
End Sub

Ausserdem war noch ein kleiner Fehler drin
Datei = Dir()
anstelle von
Datei = Dir(Pfad)
Gruss Rainer

Anzeige
AW: korrektur
18.05.2008 22:08:37
Daniel
Hi Ramses
ich weiß ja nicht, wie es in den neueren Excelversionen ist, aber bis 2002 ist Datei = Dir() auf jeden fall korrekt.
das "Dir()" bewirkt, daß die nächste Datei in der Liste gelesen wird, "Dir(Pfad)" würde immer die erste Datei aus der Liste ermitteln, dh. es wird immer die gleiche Datei umbenannt, und zwar in einer Endlosschleife (bis der Dateiname zu lang wird)
und wenn wir schon beim korrigiern sind, wenn die Dateiendung ne flexible Länge hat, dann nicht nur beim Abschneiden, sondern auch beim Wiederanfügen.
außerdem ermittelt InstrRev zwar die Position des Zeichens von rechts, nichtsdestotrotz wird das Ergebnis von LINKS gezählt (zumindest bis 2002), daher:

Sub Umbenennen()
Dim Pfad As String
Dim Nr As Integer
Dim myExt As Integer
Dim Datei As String
Dim NameNeu As String
Pfad = "C:\Data\"
Datei = Dir(Pfad)
Do Until Datei = ""
Nr = Nr + 1
NameNeu = Pfad
myExt = Len(Datei) - InStrRev(Datei, ".", -1) + 1
NameNeu = NameNeu & Left(Datei, Len(Datei) - myExt)
NameNeu = NameNeu & Format(Nr, "0000")
NameNeu = NameNeu & Right(Datei, myExt)
Name Pfad & Datei As NameNeu
 Datei = Dir()
Loop
End Sub


Gruß, Daniel

Anzeige
AW: korrektur
18.05.2008 22:15:37
Herbert
Hi,
auch wenn du hier wirklich tolle Hilfe leistest, stehen auch dir Recherche/Archiv zur Verfügung.
Einfacher als mit der FSO-Funktion GetExtensionName gehts nun wirklich nicht.
mfg Herbert

AW: korrektur
18.05.2008 22:29:00
Daniel
HI
sorry, aber den Befehl kenne ich nicht.
die Hilfe sagt mir zu "GetExtensionName" - "Schlüsselwort nicht gefunden"
aus dem Archiv finde ich auch nichts wirklich hilfreiches zum Thema.
Foren, in denen nur im Archiv gesucht und nicht gefragt wird, sind irgendwann tot, weil sich nichts tut.
Poste doch lieber mal ein kleines Codebeispiel, wie man in diesem Fall die GetExtensionName-Funktion korrekt einsetzt, dann haben alle Mitleser was davon und lernen dazu (was ja schließlich Sinn des Forums hier ist).
Gruß, Daniel

Anzeige
AW: korrektur
18.05.2008 22:59:47
Herbert
Hi,
"...Foren, in denen nur im Archiv gesucht und nicht gefragt wird..."
Davon war gar nicht die Rede, sondern von "auch", aus dem Archiv von K.Rola:

Function GetEx(Dateiname As String)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
GetEx = "." & fso.GetExtensionName(Dateiname)
End Function


mfg Herbert

Anzeige
AW: korrektur
18.05.2008 23:20:00
Daniel
Hi
ok, ich weiß jetzt bescheid, aber mal schaun, ob Peter mit dieser Information zurecht kommt und das in sein Programm einbauen kann.
Schließlich ist er der Fragesteller.
Aber ob die zusätzliche Funktion jetzt wirklich soviel einfacher ist als die von Ramses vorgeschlagene Lösung?
Peter wird dazu ja hoffentlich noch eine Rückmeldung geben.
Gruß, Daniel

Da hast du recht,..
18.05.2008 22:19:51
Ramses
Hallo
Das mit dem Dir() war mein Fehler, ... man sollte also ausprobieren, was man schreibt.
Das kuriose ist allerdings, dass InstrRev nicht funktioniert.
Habe das gerade ausprobiert, und es ergibt sich tatsächlich ein falsches Ergebnis.
Obwohl die Funktion den übergebenen String "umdrehen" müsste, funktioniert tatsächlich nicht mehr.
Warum das so ist, verstehe ich auch nicht. Auch bei einigen anderen Makros wo ich die Funktion verwende funktioniert das nicht mehr
Da bin ich ehrlich gesagt ratlos und staune mit grossen Augen !!
Da muss ich mal sehen, warum das nun so ist. Die Funktion ist eigentlich extra für diese Fälle gemacht.
Das grenzt die Funktionalität erheblich ein und macht das ganze problematisch, da nun der Dateiname keine 2 Punkte enthalten darf !!
Wenn du das sicherstellen kannst, dann vielleicht so
Option Explicit

Sub Umbenennen()
    Dim Pfad As String
    Dim Nr As Integer
    Dim myExt As Integer
    Dim Datei As String
    Dim NameNeu As String
    Pfad = "C:\Data\"
    Datei = Dir(Pfad)
    Do Until Datei = ""
        Nr = Nr + 1
        NameNeu = Pfad
        myExt = InStr(1, Datei, ".")
        NameNeu = NameNeu & Left(Datei, Len(Datei) - (Len(Datei) - myExt + 1))
        NameNeu = NameNeu & Format(Nr, "_0000")
        NameNeu = NameNeu & Right(Datei, Len(Datei) - (myExt - 1))
        Name Pfad & Datei As NameNeu
        Datei = Dir()
    Loop
End Sub

Gruss Rainer

Anzeige
AW: Da hast du recht,..
18.05.2008 22:50:00
Daniel
Hi
also die InstRev-Funktion kenne ich immer nur so, wie sie hier funktioniert.
- es wird as erste Zeichen von RECHTS ermittelt (dh. der Dateiname darf auch mehrere "." enthalten).
- die Postion des gefundenen Zeichens wird aber trotzdem von LINKS gezählt, dh
InstrRev("12.456.89", ".") = 7
das muss man wissen und wenn man die Position von RECHTS gezählt braucht, eben mit LEN entsprechend umrechnen.
Gruß, Daniel

Es gibt Tage....
19.05.2008 11:19:00
Ramses
Hallo
... da sollte man besser nicht antworten :-)
Du hast natürlich recht.
Gruss Rainer

AW: Es gibt Tage....
19.05.2008 22:48:00
Peter
Guten Abend
Ich konnte erst heute spät die Antworten lesen - und mein Problem lösen. Ganz herzlichen Dank an alle, die zur Lösung beigetragen haben.
Gruss, Peter
Anzeige

70 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige