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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass die
cmd.exe
arbeitet mit verschiedenen code-Seite alscscript.exe/wscript.exe
. Ich habe ähnliches problem in Polen, wocmd.exe
arbeitet mit codepage 852 (ich glaube, dies ist für die Kompatibilität mit älteren MS-DOS-Programme) undwscript.exe
funktioniert in Windows' native codepage 1250.Das problem zu lösen, fügen Sie die folgende Zeile am Anfang der batch-Datei:
mode con cp select=1250
Oder verwenden Sie
chcp 1250
InformationsquelleAutor MBu