Text-Codierung auf WScript Argumente

Ich versuche zu generieren, die E-mail-Konfigurationen und personalisierte Signaturen, die über eine batch-Datei, liest eine Liste von Benutzern, eine Vorlage und erstellt eine personalisierte Ausgabe. Das ist fertig und funktioniert:

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
GOTO begin
:writesignature
cscript //NoLogo replacetext.vbs "[NAME]" %1 signature.html stdout | cscript //NoLogo  replacetext.vbs "[JOB]" %3 stdin stdout | cscript //NoLogo replacetext.vbs "[EMAIL]" %2 stdin signature-%4.html
GOTO :end
:begin
FOR /F "tokens=1,2,3,4 delims=;" %%A IN ('TYPE people.lst') DO CALL :writesignature "%%A" "%%B" "%%C" %%D
:end

Tun, den text zu ersetzen, habe ich replacetext.vbs,, die mir erlaubt, ersetzen Sie eine Zeichenfolge für andere, und geleitet werden kann, wenn stdin und stdout angegeben, die als Quelle und Ziel-Dateien:

CONST ForReading = 1
CONST ForWritting = 2
CONST ForAppending = 8
CONST OpenAsASCII   = false  
CONST OpenAsUnicode = true
CONST OpenAsDefault = -2
Const OverwriteIfExist = true
Const FailIfExist      = false
Const CreateIfNotExist = true
Const FailIfNotExist   = false
SET objFSO = CreateObject("Scripting.FileSystemObject")
SET objFILEINPUT = Wscript.StdIn
SET objFILEOUTPUT = Wscript.StdOut
IF (Wscript.Arguments.Count < 2) OR (Wscript.Arguments.Count > 4) THEN
Wscript.Echo "Not enought arguments"
Wscript.Echo "replacetext ""<original>"" ""<replacement>"" "
Wscript.Quit(1 MOD 255)
END IF
IF Wscript.Arguments.Count > 2 THEN
    IF Wscript.Arguments(2) = "stdin" THEN
'       Wscript.Echo "Input: StdIn"
    ELSE
'       Wscript.Echo "Input: " + Wscript.Arguments(2)
        SET objFILEINPUT = objFSO.OpenTextFile(Wscript.Arguments(2), ForReading, OpenAsASCII)
    END IF
    IF Wscript.Arguments.Count = 4 THEN
        IF Wscript.Arguments(3) = "stdout" THEN
'           Wscript.Echo "Output: StdOut"
        ELSE
'           Wscript.Echo "Output: " + Wscript.Arguments(3)
            IF objFSO.FileExists(Wscript.Arguments(3)) THEN
                SET objFILEOUTPUT = objFSO.OpenTextFile(Wscript.Arguments(3), ForWritting, CreateIfNotExist, OpenAsASCII)
            ELSE
                SET objFILEOUTPUT = objFSO.CreateTextFile(Wscript.Arguments(3), OverwriteIfExist, OpenAsASCII)
            END IF
        END IF
    END IF
END IF
strText = objFILEINPUT.ReadAll()
strNewText = Replace(strText, Wscript.Arguments(0), Wscript.Arguments(1))
objFILEOUTPUT.Write(strNewText)
objFILEOUTPUT.Close
objFILEINPUT.Close
Wscript.Quit(0 MOD 255)

Das problem ist, dass wenn ich nicht-ASCII-Zeichen in ANSI/Windows-1250 in den Menschen.lst (Comunicación), während es funktioniert und liest Sie in der Konsole, zeigt Ihnen (keine Umwandlung) als OEM-Zeichen (Comunicaci¾n) wenn ich Schreibe die Ausgabe-Dateien irgendwie funktioniert konvertieren Sie Sie transparent, so dass die Ausgabe-Datei in Windows zeigt Comunicaci¾n statt Comunicación.

Nach langem debugging habe ich lokalisiert das problem in der NUR die Argumente (keine automatische Umstellung auf die Vorlage-Datei).

Wie kann ich deaktivieren, sagte transparente Umwandlung, oder zurück konvertieren die Eingabe von ANSI zu OEM-also die Umwandlung funktioniert wie gedacht?

InformationsquelleAutor Rubén Martínez | 2012-03-01

Schreibe einen Kommentar