Mit VB Script Sonderzeichen entfernen.
Mit VB Script Sonderzeichen aus Dateinamen entfernen.
Hallo zusammen.
Wie ja manche vielleicht wissen, hatte ich eine Fehleinschätzung bezüglich der Linkkonventionen. Daraus resultiert nun die Anforderung, in diesem Schritt alle Sonderzeichen aus Dateinamen zu konvertieren.
Den Einsatz des Scripts stelle ich mir so vor, das ich es in dem Ordner mit den umzubenennenden Dateien plaziere und das Script nach anklicken alle Dateien im Ordner nach folgendem Schema umbenennt:
Á,%C1,Á = A
á,%E1,á = a
À,%C0,À = A
à,%E0,à = a
Â,%C2, = A
â,%E2,â = a
Ä,%C4,Ä = Ae
ä,%E4,ä = ae
Ã,%C3,Ã = A
ã,%E3,ã = a
Ç,%C7,Ç = C
ç,%E7,ç = c
É,%C9,É = E
é,%E9,é = e
È,%C8,È = E
è,%E8,è = e
Ê,%CA,Ê = E
ê,%EA,ê = e
Í,%CD,Í = I (groß i)
í,%ED,í = i
Ì,%CC,Ì = I (groß i)
ì,%EC,ì = i
Õ,%D5,Õ = O
õ,%F5,õ = o
Ô,%D4,Ô = O
ô,%F4,ô = o
Ó,%D3,Ó =O
ó,%F3,ó = o
Ö,%D6,Ö = Oe
ö,%F6,ö = oe
Ú,%DA,Ú = U
ú,%FA,ú = u
Ü,%DC,Ü = Ue
ü,%FC,ü = ue
Die Endungen der Dateien sollen unverändert bleiben. Also aus Abença.php wird Abenca.php. Da ich die Gefahr der doppelten Dateinamen nach Umbenennen wegen der großen Anzahl der Dateien nicht abschätzen kann( hier im Beispiel würde z.B die Datei Abenca.php schon regulär existieren), sollte eine Prüfung auf Dopplung nach einer virtuellen Umbenennung erfolgen, bevor die Umbenennung real durchgeführt wird. Falls schon vorhanden, die Datei mit Sonderzeichen in eine Protokolldatei reinschreiben.
Da ich leider in VB noch sehr unerfahren bin, würde ich mich sehr freuen, hier wieder einmal gute Hilfe zu bekommen.
Und ich verspreche auch, mich nach Fertigstellung meines Projektes verstärkt in VB einzuarbeiten, so das ich dann nur noch um kleinere Korekturen nachfragen muß, also schon eine Grundstruktur vorlegen kann.
Darum bin ich um so erfreuter, festhalten zu können, das hier auf administrator.de viele Menschen (speziel bastla) anderen sehr fachkundig weiterhelfen.
MfG
Fraenky
Hallo zusammen.
Wie ja manche vielleicht wissen, hatte ich eine Fehleinschätzung bezüglich der Linkkonventionen. Daraus resultiert nun die Anforderung, in diesem Schritt alle Sonderzeichen aus Dateinamen zu konvertieren.
Den Einsatz des Scripts stelle ich mir so vor, das ich es in dem Ordner mit den umzubenennenden Dateien plaziere und das Script nach anklicken alle Dateien im Ordner nach folgendem Schema umbenennt:
Á,%C1,Á = A
á,%E1,á = a
À,%C0,À = A
à,%E0,à = a
Â,%C2, = A
â,%E2,â = a
Ä,%C4,Ä = Ae
ä,%E4,ä = ae
Ã,%C3,Ã = A
ã,%E3,ã = a
Ç,%C7,Ç = C
ç,%E7,ç = c
É,%C9,É = E
é,%E9,é = e
È,%C8,È = E
è,%E8,è = e
Ê,%CA,Ê = E
ê,%EA,ê = e
Í,%CD,Í = I (groß i)
í,%ED,í = i
Ì,%CC,Ì = I (groß i)
ì,%EC,ì = i
Õ,%D5,Õ = O
õ,%F5,õ = o
Ô,%D4,Ô = O
ô,%F4,ô = o
Ó,%D3,Ó =O
ó,%F3,ó = o
Ö,%D6,Ö = Oe
ö,%F6,ö = oe
Ú,%DA,Ú = U
ú,%FA,ú = u
Ü,%DC,Ü = Ue
ü,%FC,ü = ue
Die Endungen der Dateien sollen unverändert bleiben. Also aus Abença.php wird Abenca.php. Da ich die Gefahr der doppelten Dateinamen nach Umbenennen wegen der großen Anzahl der Dateien nicht abschätzen kann( hier im Beispiel würde z.B die Datei Abenca.php schon regulär existieren), sollte eine Prüfung auf Dopplung nach einer virtuellen Umbenennung erfolgen, bevor die Umbenennung real durchgeführt wird. Falls schon vorhanden, die Datei mit Sonderzeichen in eine Protokolldatei reinschreiben.
Da ich leider in VB noch sehr unerfahren bin, würde ich mich sehr freuen, hier wieder einmal gute Hilfe zu bekommen.
Und ich verspreche auch, mich nach Fertigstellung meines Projektes verstärkt in VB einzuarbeiten, so das ich dann nur noch um kleinere Korekturen nachfragen muß, also schon eine Grundstruktur vorlegen kann.
Darum bin ich um so erfreuter, festhalten zu können, das hier auf administrator.de viele Menschen (speziel bastla) anderen sehr fachkundig weiterhelfen.
MfG
Fraenky
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73180
Url: https://administrator.de/contentid/73180
Ausgedruckt am: 04.11.2024 um 18:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Fraenky!
Etwas zum Testen:
Benötigt wird dazu die Datei "SonderzeichenErsetzung.txt" (siehe Zeile "Const sSonder = ...") mit folgendem Inhalt:
Am Beginn jeder Zeile steht der Ersatztext, dahinter (durch Kommata getrennt) die zu ersetzenden Zeichen(-folgen).
Das Script erwartet die Übergabe des zu bearbeitenden Ordners und erstellt für jene Dateien, welche (wegen daraus resultierender Namensgleichheit mit bereits vorhandenen Dateien) nicht umbenannt werden können, im in der ersten "Const"-Zeile festgelegten Ordner eine Protokolldatei (Benennung mit dem Pfad des Ordners, wobei ":" entfernt und "\" durch "_" ersetzt wird - also würde für den Ordner "D:\Daten\Test" die Protokolldatei "D_Daten_Test-Doppelt.txt" heißen).
Wenn Du das Script von der Kommandozeile ausführst (zB mit
wird im CMD-Fenster die jeweils bearbeitete Datei angezeigt (weswegen ich diese Startart empfehlen würde), startetst Du per Drag&Drop (des Ordners auf die Scriptdatei) kann diese Anzeige nicht (sinnvoll) erfolgen.
Grüße
bastla
Etwas zum Testen:
'RenameSpecial.vbs
Const sProtokoll = "C:\skript"
Const sSonder = "C:\skript\SonderzeichenErsetzung.txt"
If WScript.Arguments.Count = 0 Then
WScript.Echo "Ordner mit umzubenennenden Dateien als Parameter uebergeben!"
WScript.Quit(1)
End If
Set fso = CreateObject("Scripting.FileSystemObject")
sFolder = WScript.Arguments(0)
If Not fso.FolderExists(sFolder) Then
WScript.Echo sFolder & " ist keine gueltige Ordnerangabe!"
WScript.Quit(1)
End If
If Not fso.FileExists(sSonder) Then
WScript.Echo "Sonderzeichendaten " & sSonder & " nicht gefunden."
WScript.Quit(1)
End If
Set oSonder = fso.OpenTextFile(sSonder, 1)
If Not oSonder.AtEndOfStream Then
aSonder = Split(oSonder.ReadAll, vbCrLF)
Else
oSonder.Close
WScript.Echo "Sonderzeichendatei " & sSonder & " enthält keine Daten!"
WScript.Quit(1)
End If
oSonder.Close
If Right(LCase(WScript.FullName), 11) = "cscript.exe" Then
bConsole = True
Else
bConsole = False
End If
Set oProtokoll = fso.OpenTextFile(sProtokoll & "\" & Replace(Replace(sFolder, ":", ""), "\", "_") & "-Doppelt.txt", 2, True)
Set oFolder = fso.GetFolder(sFolder)
For Each oFile In oFolder.Files
sNameOld = Left(oFile.Name, InStrRev(oFile.Name, ".") - 1)
sType = Mid(oFile.Name, InStrRev(oFile.Name, "."))
If bConsole Then WScript.Echo "Bearbeite: " & oFile.Name
sNameNew = ReplaceSpecialChars(sNameOld)
If Not fso.FileExists(oFile.ParentFolder & "\" & sNameNew & sType) Then
oFile.Name = sNameNew & sType
Else
If sNameOld <> sNameNew Then oProtokoll.WriteLine oFile.Name
End If
Next
oProtokoll.Close
Function ReplaceSpecialChars(sOld)
sTemp = sOld
For Each sLine In aSonder
aChars = Split(sLine, ",")
For i = 1 To UBound(aChars)
sTemp = Replace(sTemp, aChars(i), aChars(0))
Next
Next
ReplaceSpecialChars = sTemp
End Function
A,Á,%C1,Á,À,%C0,À,Â,%C2,Â,Ã,%C3,Ã
a,á,%E1,á,à,%E0,à,â,%E2,â,ã,%E3,ã
Ae,Ä,%C4,Ä
ae,ä,%E4,ä
C,Ç,%C7,Ç
c,ç,%E7,ç
E,É,%C9,É,È,%C8,È,Ê,%CA,Ê
e,é,%E9,é,è,%E8,è,ê,%EA,ê
I,Í,%CD,Í,Ì,%CC,Ì
i,í,%ED,í,ì,%EC,ì
O,Õ,%D5,Õ,Ô,%D4,ÔÓ,%D3,Ó
o,õ,%F5,õ,ô,%F4,ôó,%F3,ó
Oe,Ö,%D6,Ö
oe,ö,%F6,ö
U,Ú,%DA,Ú
u,ú,%FA,ú
Ue,Ü,%DC,Ü
ue,ü,%FC,ü
Das Script erwartet die Übergabe des zu bearbeitenden Ordners und erstellt für jene Dateien, welche (wegen daraus resultierender Namensgleichheit mit bereits vorhandenen Dateien) nicht umbenannt werden können, im in der ersten "Const"-Zeile festgelegten Ordner eine Protokolldatei (Benennung mit dem Pfad des Ordners, wobei ":" entfernt und "\" durch "_" ersetzt wird - also würde für den Ordner "D:\Daten\Test" die Protokolldatei "D_Daten_Test-Doppelt.txt" heißen).
Wenn Du das Script von der Kommandozeile ausführst (zB mit
cscript //nologo C:\skript\RenameSpecial.vbs "D:\Daten\Test"
Grüße
bastla
Hallo Fraenky!
Grüße
bastla
In atemberaubender Schnelligkeit ...
... spricht für Deine Hardware.... virtuelles Umbenennen ... in diesen Zeilen mit dieser If Not Anweisung realisiert ...
Ja; es wird einfach das Vorhandensein einer Datei mit dem neuen Namen und dem alten Typ überprüft und entsprechend dem Ergebnis der Überprüfung umbenannt oder protokolliert.If Not fso.FileExists(oFile.ParentFolder & "\" & sNameNew & sType) Then
oFile.Name = sNameNew & sType
oFile.Name = sNameNew & sType
Grüße
bastla