staga
Goto Top

VBS Dateien als UTF-8 speichern

Hallo zusammen

Ich habe folgende Frage und hoffe das mir hier jemand weiterhelfen kann.

ich möchte gerne via Script in einem Ordner alle bestehende Files mit der Endung xml speichern als txt mit der Option Encoding UTF-8!!!.

Ich habe bereits mehrfach gegoogelt jedoch bin ich nicht fündig geworden daher hoffe ich das mir hier jemand weiterhelfen kann.

gruss
staga

Content-ID: 185601

Url: https://administrator.de/forum/vbs-dateien-als-utf-8-speichern-185601.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

bastla
bastla 29.05.2012 um 18:31:09 Uhr
Goto Top
Hallo staga!
Ich habe bereits mehrfach gegoogelt
Vielleicht hättest Du gleich hier suchen sollen face-wink: VBScript Zeichensatz konvertieren

Grüße
bastla
staga
staga 30.05.2012 um 08:19:43 Uhr
Goto Top
Hallo bastla

Vielen dank für die Antwort, funktioniert soweit tip top.

Vielleicht kannst du oder jemand anders mir noch sagen was ich tun muss bzw. wie der Parameter heist damit ich alle Dateien in einem Verzeichnis abarbeiten kann. Im Script (VBScript Zeichensatz konvertieren) wird ja eine einzelne Datei angegeben ich habe jedoch mehrere Dateien in einem Verzeichnis.

Sorry wenn ich so dumm frage aber ich bin ein blutiger Anfänger was scripting angeht.

gruss
staga
bastla
bastla 30.05.2012 aktualisiert um 08:59:04 Uhr
Goto Top
Hallo staga!

Dazu brauchst Du eine Schleife drumherum - ungetestet etwa:
Ordner = "D:\Dein Ordner"  
Typ = "xml"  
Zusatz = "_neu"  
Set fso = CreateObject("Scripting.FileSystemObject")  

For Each File In fso.GetFolder(Ordner).Files 'alle Dateien des Ordners durchgehen  
    FileTyp = fso.GetExtensionName(File.Name) 'Dateityp ermitteln  
    'Typ überprüfen (alles in Kleinbuchstaben umwandeln, da "XML" <> "xml")  
    If LCase(FileTyp) = LCase(Typ) Then
        AnsiPath = File.Path 'Pfad ANSI-Datei  
        Utf16Path = fso.GetParentFolderName(AnsiPath) & "\" & fso.GetBaseName(AnsiPath) & Zusatz & "." & FileTyp' Pfad UTF-Datei  
        'ab hier wie im verlinkten Script  
        '...  
    End If
Next
Anmerkung: Natürlich wäre
fso.GetParentFolderName(AnsiPath)
nicht nötig, da Du den Ordner, in dem die Datei liegt, ohnehin schon kennst (steht in der Variablen "Ordner") - aber da Du ja etwas lernen willst ...

Grüße
bastla
staga
staga 30.05.2012 aktualisiert um 10:01:00 Uhr
Goto Top
Hallo
Danke erstmal. Also ich habe versucht das Script zusammen zu stellen. Irgendwie bringe ich es nicht zum laufen. Es erscheint immer ein fehler Linie 18 Char 9. Obschon jedesmal das erste File im Ordner erzeugt wird.

Ordner = "C:\Temp\test\test1\ori"  
AnsiPath = "C:\Temp\test\test1\ori"  
Utf8Path = "C:\Temp\test\test1\ori"  
Typ = "xml"  
Zusatz = "_neu"  
Set fso = CreateObject("Scripting.FileSystemObject")  

For Each File In fso.GetFolder(Ordner).Files 'alle Dateien des Ordners durchgehen  
    FileTyp = fso.GetExtensionName(File.Name) 'Dateityp ermitteln  
    'Typ überprüfen (alles in Kleinbuchstaben umwandeln, da "XML" <> "xml")  
    If LCase(FileTyp) = LCase(Typ) Then
        AnsiPath = File.Path 'Pfad ANSI-Datei  
        Utf8Path = fso.GetParentFolderName(AnsiPath) & "\" & fso.GetBaseName(AnsiPath) & Zusatz & "." & FileTyp' Pfad UTF-Datei  
        'ab hier wie im verlinkten Script  
        'Const AnsiPath = "C:\Temp\test\test1\ori"  
        'Const Utf8Path = "C:\Temp\test\test1\ori"  

        Const adTypeBinary = 1
        Const adTypeText = 2
        Const adSaveCreateOverWrite = 2
 
Dim BinaryStream, Text
    
Set BinaryStream = CreateObject("ADODB.Stream")  
        
With BinaryStream
    .Type = adTypeText
    .Charset = "x-Ansi"  
    .Open
    .LoadFromFile AnsiPath
     Text = .ReadText
    .Close
End With
        
With BinaryStream
    .Type = adTypeText
    .Charset = "UTF-8"  
    .Open
    .WriteText Text
    .SaveToFile Utf8Path, adSaveCreateOverWrite
    .Close
End With
        End If
        Next
staga
staga 30.05.2012 um 10:31:28 Uhr
Goto Top
Ok ich hab den Fehler gefunden. Ich habe die Zeilen 18-20 an den Anfang gesetzt - nun läufts.

Danke nochmals für die Hilfe

gruss
Staga
bastla
bastla 30.05.2012 um 11:30:22 Uhr
Goto Top
Hallo staga!

Sorry, hatte nicht so genau darauf geachtet, dass Dieter (richtiger Weise) Konstante verwendet - diese dürfen natürlich im gesamten Script nur einmal erstellt werden.
Die Zeilen 2 und 3 sind überflüssig, da ja die Pfade in den Zeilen 12 und 13 jeweils neu ermittelt werden.
Noch ein Tipp: Gewöhne es Dir an, konsequent Einrückungen zu verwenden (zB auch für die Zeilen ab 22) - damit wird der Code wesentlich übersichtlicher ...

Grüße
bastla