sirmcfrosty
Goto Top

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.

'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:

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
cscript //nologo C:\skript\RenameSpecial.vbs "D:\Daten\Test" 
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)

Content-Key: 263991

Url: https://administrator.de/contentid/263991

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: bastla
bastla 19.02.2015 um 19:27:02 Uhr
Goto Top
Hallo SirMcFrosty!

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"
Grüße
bastla
Mitglied: SirMcFrosty
SirMcFrosty 19.02.2015 um 23:43:28 Uhr
Goto Top
Danke bastla schonmal vorab. Dein Tip war schon mal ein Anfang.

Mit dem Aufruf des scripts durch deine FOR Schleife benennt es zwar Dateien aus den Unterordnern um aber nicht die im Startordner. Eine Umbenennung der Ordnernamen selbst findet natürlich script bedingt nicht statt.

Wäre super wenn jemand das ganze im script selbst noch vollständig umsetzen könnte face-smile (das schöne ist es lässt sich ja für recht viele diverse Umbennenungsprobleme nutzen dann)