Mit VB Script Sonderzeichen in Datei und Ordnernamen umbenennen
Folgendes Szenario:
Einige Datei und/oder Ordnernamen besitzen Sonderzeichen(-kombinationen) die nun geändert/umbenannt werden müssen
Beispiel:
Aus ""Geschäftsüberlassung" soll wieder "Geschäftsüberlassung" werden
Bastla schrieb 2007 dazu ein wunderbares VB script. Hierzu wäre eine kleine Erweiterung echt super. Und zwar das das script nun sowohl Datei als auch Ordnernamen umbenennt und dieses auch für alle Unterordner (und den darin befindlichen Dateien) des übergebenen Startordners.
Das Problem könnte sich wohl mit einer FOR /D /r schleife regeln lassen aber ich scheitere mangels Fachwissen an der Umsetzung.
Wäre super wenn mir da jemand helfen könnte und das script (siehe unten) anpasst.
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.
(Code by Bastla)
Einige Datei und/oder Ordnernamen besitzen Sonderzeichen(-kombinationen) die nun geändert/umbenannt werden müssen
Beispiel:
Aus ""Geschäftsüberlassung" soll wieder "Geschäftsüberlassung" werden
Bastla schrieb 2007 dazu ein wunderbares VB script. Hierzu wäre eine kleine Erweiterung echt super. Und zwar das das script nun sowohl Datei als auch Ordnernamen umbenennt und dieses auch für alle Unterordner (und den darin befindlichen Dateien) des übergebenen Startordners.
Das Problem könnte sich wohl mit einer FOR /D /r schleife regeln lassen aber ich scheitere mangels Fachwissen an der Umsetzung.
Wäre super wenn mir da jemand helfen könnte und das script (siehe unten) anpasst.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
'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
Benötigt wird dazu die Datei "SonderzeichenErsetzung.txt" (siehe Zeile "Const sSonder = ...") mit folgendem Inhalt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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,ü
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
1
cscript //nologo C:\skript\RenameSpecial.vbs "D:\Daten\Test"
(Code by Bastla)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 263991
Url: https://administrator.de/forum/mit-vb-script-sonderzeichen-in-datei-und-ordnernamen-umbenennen-263991.html
Ausgedruckt am: 14.04.2025 um 19:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo SirMcFrosty!
Nur mal auf die Schnelle: Das "
Grüße
bastla
Nur mal auf die Schnelle: Das "
for /d /r
" wäre für den Aufruf des Scripts in CMD einzusetzen - damit könnten zumindest schon mal alle Dateien im Startordner und unterhalb bearbeitet werden; ungetestet etwa so:for /d /r "D:\Daten\Test" %i in (*) do cscript //nologo C:\skript\RenameSpecial.vbs "%i"
bastla