cadsys-chemnitz
Goto Top

Mit VB Script Sonderzeichen entfernen die 2.

Wie Bastla in dem Thread unter dem Link:

Mit VB Script Sonderzeichen entfernen.

beschrieben hat habe ich auch bei mir die Konvertierung umgesetzt.. Erstmal Danke auach von mir an Bastla.

Ich brauche dazu aber das ganze nicht nur für Dateien in diesem Ordner sondern auch für Dateien in Unterordnern und den Ordnernamen und Unterordnernamen selbst.

Hab schon bissl rumprobiert aber er springt nicht in unterordner, bzw wenn ich einen Ordner umbennen lassen konvertiert er mir die Dateien darin nicht mehr.

hier nochmal das Originalscript von Bastla.

'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

Content-Key: 116440

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

Printed on: April 24, 2024 at 15:04 o'clock

Member: bastla
bastla May 20, 2009 at 15:47:09 (UTC)
Goto Top
Hallo Cadsys-Chemnitz!

Es steckt zwar sicher Optimierungspotenzial in dem Script face-wink, aber grundsätzlich sollte es so funktionieren:
'RenameSpecialR.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)  
ProcessFolder(fso.GetFolder(sFolder))
oProtokoll.Close

Sub ProcessFolder(oFolder)
sNameOld = oFolder.Name
If bConsole Then WScript.Echo "Bearbeite: " & oFolder.Path  

sNameNew = ReplaceSpecialChars(sNameOld)
If Not fso.FolderExists(oFolder.ParentFolder & "\" & sNameNew) Then  
    oFolder.Name = sNameNew
Else
    If sNameOld <> sNameNew Then oProtokoll.WriteLine oFolder.Path
End If

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.Path  
	
    sNameNew = ReplaceSpecialChars(sNameOld)
    If Not fso.FileExists(oFile.ParentFolder & "\" & sNameNew & sType) Then  
        oFile.Name = sNameNew & sType
    Else
        If sNameOld <> sNameNew Then oProtokoll.WriteLine oFile.Path
    End If
Next

For Each oSubFolder In oFolder.SubFolders
    ProcessFolder(oSubFolder)
Next
End Sub

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
Grüße
bastla
Member: Biber
Biber May 20, 2009 at 16:05:11 (UTC)
Goto Top
Moin Cadsys-Chemnitz,
<OT>
running gag #397
wenn ich einen Ordner umbennen lassen...
Menno, ich hab doch allen so oft angeboten, dass wir auch das viel einfachere Wort renamen oder meinetwegen umbenamsen verwenden dürfen...

WTF macht denn dieses Wort "Umbenennen" so schwierig?
Da ist kein "TZ", kein "PH" kein "Y" drin....

</OT>

Schönes Wochenende und drückt nachher mit mir Werder die Daumen.
Biber
Member: dog
dog May 21, 2009 at 01:04:06 (UTC)
Goto Top
Da ist kein "TZ", kein "PH" kein "Y" drin...

Wie in Phytzik?

Sorry, der musste sein...
Member: MonoTone
MonoTone May 21, 2009 at 21:25:09 (UTC)
Goto Top
Zitat von @Biber:

Schönes Wochenende und drückt nachher mit mir Werder die
Daumen.
Biber

Hat nix genutzt face-sad
Member: Cadsys-Chemnitz
Cadsys-Chemnitz May 22, 2009 at 07:04:17 (UTC)
Goto Top
Sorry das ich gestern nicht mehr Antworten konnte, lag wohl am Alkohol.^^

Also das funktioniert jetzt richtig prima, danke an Bastla.


An alle die betroffen sind heute nen schönen Brückentag.

S Y L

Tino
Member: nullnulleins
nullnulleins Apr 15, 2010 at 02:49:14 (UTC)
Goto Top
Soo.. hallo zusammen! face-smile

..jetzt habe ich mich extra angemeldet um diesen verstaubten thread mal wieder vorzukramen..
ich habe hier 10000de von Dateien, Ordner und Unterordner bei welchen nach Kopieraktionen über verschiedenen Filesystem und Betriebsysteme die Umlauten falsch angezeigt werden. Jetzt mag Windows XP die Dateien nicht mehr weiterkopieren.. ;)

Der Inhalt meiner "SonderzeichenErsetzung.txt" sieht jetzt wie folgt aus:
(jaa...ein grosses verkrüppeltes Ä suche ich noch.. )

ss,ß
Ae,ä
ae,ä
Oe,Ö
oe,├Â
Ue,Ü
ue,├╝
_, ,
_,(
_,)


Das Script läuft auch schön durch ersetzt aber nur Leerzeichen durch "_"

Habt ihr eine Erklärung dafür warum die anderen Zeichen nicht ersetzt werden?

Die Zeichen sind so wie sie in der shell angezeigt werden. kann vba damit evtl nicht umgehen??
Ich hatte hier auch eine .bat stapelverarbeitung von bastl gefunden. damit hat es geklappt.. aber halt ohne unterordner..usw... von daher gehe ich davon aus das ich schon die "richtigen" zeichen ersetze. ;) ..
unter windows werden nur kästchen angezeigt .
Was kann ich noch tun?

LG, die nullnummer
Member: bastla
bastla Apr 15, 2010 at 08:47:23 (UTC)
Goto Top
Hallo nullnulleins und willkommen im Forum!
Die Zeichen sind so wie sie in der shell angezeigt werden.
... und damit im ASCII-Format - VBScript verwendet allerdings ANSI.

Du solltest die Zeichen aus der Anzeige im Explorer holen (Dateinamen markieren, F2, Zeichen herauskopieren).

Grüße
bastla