Nummerierte Dateien in einem Ordner umbenenen
#1
Hallo liebe Leute,

folgendes: Ich habe in einem Ordner C:\Liste  viele durchnummerierte Dateien mit dem Format A0001.xls, A0002.xls, A0003.xls. usw.  Diese Dateien möchte ich nun umbenennen.
Aus A0001.xls (alt) soll  z.B. A0002.xls (neu) werden, dann weiter aus A0002.xls (alt)   A0003.xls (neu) usw. Ich möchte also gezielt nur die einzelnen Nummern ändern. Das Format
0000 und der Anfangsbuchstabe A für alle meine Dateien soll erhalten bleiben.


Wie muss ich meinen Code ergänzen, damit die Sache klappt.


Code:
Sub Alle_Umbenennen()
'Alle Nummern um den Betrag X erhöhen
Set fs = CreateObject("Scripting.FileSystemObject")
Set oFolder = fs.GetFolder("C:\Liste\").Files

For Each File In oFolder
????
Next File

End Sub

Vorweg schon mal Danke für eure Bemühungen.
Top
#2
Was beabsichtest du damit ?
Top
#3
Hallo,

ich beabsichtige damit eigentlich Ordnung auf meinem Computer zu schaffen, bzw. zwischen abgearbeiteten und neuen Dateien zu unterscheiden.
Mache ich der aus der 0001 eine 0100 mit dem Ganzen Schwung der Dateien dahinter, weiß ich für mich persönlich, dass ich mit den Dateien
fertig bin. Das gilt natürlich nicht nur für Excel Dateien. Insofern mag die Fragestellung etwas akademisch formuliert erscheinen.
Top
#4
Wäre dann nicht einfacher:

Speichere A0008.xls als B0008.xls, lösche A0008.xls

NB. Das sortiert auch besser.
Top
#5
Hallo,

du wirst lachen an so etwas ähnlich hatte ich im Zusammenhang mit der For Each - Schleife auch schon gedacht.
Und zwar so wandel die 0001 in eine 0002 um und mache aus dem A ein B.  Natürlich auch für alle nachfolgenden Dateien und verhindere somit das Überschreiben der Dateien,
weil die For each Schleife ja nur vorwärts zählt. Mit einem weiteren For Each Durchlauf könnte man dann das B wieder in ein A zurückverwandeln. Fand das aber wenig elegant.
Aber wer weiß, vielleicht gehts auch nicht anders.
Top
#6
Oder die Datei speichern in Folder "G:\fertig\"
Top
#7
Hallo,

warum nicht die Methode "doof" wählen.  Einfach so tun als ob z.B. 10000 (oder auch mehr)  umzubenennde Dateien im Ordner sind. Mit "On Error Resume Next" werden Fehlermeldungen des Compilers bei nicht vorhandenen Dateien  ignoriert und die Schleife wird weiter abgearbeitet. Vorteil, ausser dem Dateinamen A + Format (n, "0000") + .xls wird nichts eingegeben, geprüft oder sonst irgendwas getan.


Code:
Sub Umbenennen()
On Error Resume Next
Dim vers As Integer 'Verschiebungsfaktor

vers = 1
'og = Obergrenze, hautsache groß!
For og = 10000 To 1 Step -1
Name "C:\Test\A" & Format(og, "0000") & ".xls" As "C:\Test\A" & Format(og + vers, "0000") & ".xls"
Next

End Sub
Top
#8
O.K. programmiertechnisch vielleicht doch etwas sauberer und dafür die Verschiebung auch in 2 Richtungen vielleicht so:


Code:
Sub Umbenennen()
Dim vbend As String, vstrV1D As String, vers As Integer
vstrV1D = "C:\Test\A"
vbend = ".xls"

vers = 100 'Verschiebungswert plus oder minus

If vers > 0 Then
For vbgre = 100000 To 1 Step -1
If Dir(vstrV1D & Format(vbgre, "0000") & vbend) <> "" Then _
Name vstrV1D & Format(vbgre, "0000") & vbend As vstrV1D & Format(vbgre + vers, "0000") & vbend
Next
Else
For vbgre = 1 To 100000
If Dir(vstrV1D & Format(vbgre, "0000") & vbend) <> "" Then _
Name vstrV1D & Format(vbgre, "0000") & vbend As vstrV1D & Format(vbgre + vers, "0000") & vbend
Next
End If

End Sub
Top
#9
Hallöchen,

wenn Du das Makro auch für andere Dateitypen flexibel gestalten willst, dann hab ich hier noch einen Ansatz für das Trennen der Dateierweiterung:

Erweiterung = Right(Dateiname, Len(Dateiname) - InStrRev(Dateiname, "."))
NameOhneE = Left(Dateiname, InStrRev(Dateiname, ".") - 1)

allgemeiner Hinweis:
Ist in der Variable für den Dateinamen der Pfad enthalten, trennt man ihn nach dem Muster für die Erweiterung ab.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#10
Ist schon von MS erfunden:


Code:
with  CreateObject("scripting.filesystemobject")
     c00=.GetExtensionName("G:\OF\Beispeile.xls")
     c01=.GetBaseName("G:\OF\Beispeile.xls")
end with


schau mal (und mehr):
http://www.snb-vba.eu/VBA_Bestanden.html#L_3
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste