vic666

DateiRenamer nach Listenwerten

Breche mit gerade die Finger

Folgendes Problem:
Ich habe eine Reihe von Dateien (PDF), diese müssen anhand einer Liste (CSV) automatisch umbenannt werden.
Der Aufbau der Liste ist:

Wert1, Wert2,....Wertn, <Pfad zum Dokument>

Der Wert1 soll der Dateiname werden.

Ich stelle mir folgenden Ablauf vor:

Öffnen der CSV-Datei, auslesen der ersten Zeile, trennen der Werte, (Array?), dann umbenennen der Datei, auslesen der nächsten Zeile bis Ende.
Das sollte doch mit den FSOs möglich sein?

Gruß
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 142979

Url: https://administrator.de/forum/dateirenamer-nach-listenwerten-142979.html

Ausgedruckt am: 30.04.2025 um 15:04 Uhr

bastla
bastla 17.05.2010 um 17:13:51 Uhr
Goto Top
Hallo Vic666 und willkommen im Forum!

Ungetestet etwa so:
CSV = "D:\Deine CSV-Datei.csv"  
Delim = "," 'Feldtrennzeichen  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLf)
For Each Line In T
    F = Split(Line, Delim)
    Neu = F(0)
    Alt = F(UBound(F))
    If fso.FileExists(Alt) Then fso.GetFile(Alt).Name = Neu '& ".pdf"  
Next
Da ich "Wert1" nicht kenne, habe ich in Zeile 10 noch dafür vorgesorgt, dass der Typ ".pdf" noch hinzugefügt werden muss - in diesem Fall einfach das Kommentarzeichen (') entfernen.

Nicht berücksichtigt (da von Dir auch nicht angesprochen) ist die Möglichkeit, dass es bereits eine gleichnamige Datei gibt.

Grüße
bastla
vic666
vic666 18.05.2010 um 09:29:33 Uhr
Goto Top
Hallo Bastla,

Supi, vielen Dank! Dein code ist nicht nur gut, sondern sehr gut!!!

Bis auf ein kleines Problem, ich bekomme ein "List Index out of Bound" am Ende da T folgenden letzten Wert bekommt: : T(480) : "" : String
Den Fehler kann ich zwar mit einem on error abfangen, ist aber nicht gerade elegant.
Hast Du hier ad hoc eine Lösung?
Danke!
Gruß
vic666
bastla
bastla 18.05.2010 um 11:11:23 Uhr
Goto Top
Hallo vic666!

Pack einfach die Zeilen 7 bis10 in einen "If"-Block:
If Trim(Line) <> "" Then
Grüße
bastla
vic666
vic666 31.05.2010 um 15:41:35 Uhr
Goto Top
Hallo Bastla,

wie es immer so ist wenn ein Script erst einmal läuft dann kommen die weiteren Anforderungen und Ausnahmen hinzu:

Es kann in der CSV-Datei passieren, das Werte innerhalb von Delimitern Zeilenumbrüche enthalten, d.h. das der String sich über mehrere Zeilen hintereinander verteilt:

wert1, wert2, we
rt3,
wert4, wertn

Wie kriege ich das gebacken????

Grüße
Vic666
bastla
bastla 31.05.2010 um 16:03:31 Uhr
Goto Top
Hallo vic666!
Es kann in der CSV-Datei passieren, das Werte innerhalb von Delimitern Zeilenumbrüche enthalten, d.h. das der String sich über mehrere Zeilen hintereinander verteilt:
Das wäre aber keine CSV-Datei mehr (da nicht mehr erkennbar, wo ein Satz = Zeile endet) - insofern wäre hier eher bei der Entstehung dieser seltsamen Datei anzusetzen ...

Sollte ich das aber falsch interpretiert haben und der Zeilenumbruch innerhalb des Feldes entspricht nicht dem Umbruch am Zeilenende (da zB nur LF ohne CR), sollte sich das per "Replace()" reparieren lassen, also etwa:
F = Split(Replace(Line,vbLf,""), Delim)
Grüße
bastla
vic666
vic666 01.06.2010 um 09:38:19 Uhr
Goto Top
Hallo Bastla,

die "CSV-Datei" ist ein Export aus einer Anwendung heraus. Manipulieren kann ich hier nur leider die Feldbegrenzungs- und Trennzeichen. Und die Inhalte eines Wertes sind mit CR getrennt.
Noch mal zum Verständis der Satzaufbau an einem Besispiel:

Vorname, Nachname, Anschrift, Alter, (Dateipfad)[CR]
Vorname, Nachname, Anschrift(Teil1) [CR]
Anschrift(Teil2)[CR], Alter, (Dateipfad)[CR]
Vorname, Nachname, Anschrift(Teil1) [CR]
Anschrift(Teil2)[CR]
Anschrift(Teil3)[CR], Alter, (Dateipfad)[CR]

Gruß
vic666
77559
77559 01.06.2010 um 16:05:19 Uhr
Goto Top
Hallo vic666,

da zum Umbenennen ja ein existierender Dateipfad als letztes Element gefunden werden muss, liest du solange Zeilen ein, bis das zutrifft.
Die dazwischen liegenden, fürs Umbenennen nicht nötigen Angaben verwirfst du.

Gruß
LotPings