fraenky
Goto Top

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

Content-ID: 73180

Url: https://administrator.de/forum/mit-vb-script-sonderzeichen-entfernen-73180.html

Ausgedruckt am: 22.12.2024 um 21:12 Uhr

bastla
bastla 09.11.2007 um 18:59:02 Uhr
Goto Top
Hallo Fraenky!

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
Benötigt wird dazu die Datei "SonderzeichenErsetzung.txt" (siehe Zeile "Const sSonder = ...") mit folgendem Inhalt:
A,Á,%C1,&Aacute;,À,%C0,&Agrave;,Â,%C2,&Acirc;,Ã,%C3,&Atilde;
a,á,%E1,&aacute;,à,%E0,&agrave;,â,%E2,&acirc;,ã,%E3,&atilde;
Ae,Ä,%C4,&Auml;
ae,ä,%E4,&auml;
C,Ç,%C7,&Ccedil;
c,ç,%E7,&ccedil;
E,É,%C9,&Eacute;,È,%C8,&Egrave;,Ê,%CA,&Ecirc;
e,é,%E9,&eacute;,è,%E8,&egrave;,ê,%EA,&ecirc;
I,Í,%CD,&Iacute;,Ì,%CC,&Igrave;
i,í,%ED,&iacute;,ì,%EC,&igrave;
O,Õ,%D5,&Otilde;,Ô,%D4,&Ocirc;Ó,%D3,&Oacute;
o,õ,%F5,&otilde;,ô,%F4,&ocirc;ó,%F3,&oacute;
Oe,Ö,%D6,&Ouml;
oe,ö,%F6,&ouml;
U,Ú,%DA,&Uacute;
u,ú,%FA,&uacute;
Ue,Ü,%DC,&Uuml;
ue,ü,%FC,&uuml;
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.

Grüße
bastla
Fraenky
Fraenky 09.11.2007 um 22:01:22 Uhr
Goto Top
Waou bastla.
Ein Script, ein Volltreffer. In atemberaubender Schnelligkeit wird alles zu 100% erledigt. Ich habe den Ordner auf das Script gezogen und es lief wie am Schnürchen. Auch die Dopplungen ( ca. 20) wurden korrekt angezeigt.
1A suuuper bastla.
Danke
Fraenky

PS.
Verstehe ich des Script richtig, das Du das, was ich virtuelles Umbenennen genannt habe, in diesen Zeilen mit dieser If Not Anweisung realisiert hast?
If Not fso.FileExists(oFile.ParentFolder & "\" & sNameNew & sType) Then oFile.Name = sNameNew & sType  
bastla
bastla 10.11.2007 um 09:49:34 Uhr
Goto Top
Hallo Fraenky!

In atemberaubender Schnelligkeit ...
... spricht für Deine Hardware.

... virtuelles Umbenennen ... in diesen Zeilen mit dieser If Not Anweisung realisiert ...
If Not fso.FileExists(oFile.ParentFolder & "\" & sNameNew & sType) Then
oFile.Name = sNameNew & sType
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.

Grüße
bastla