2008-10-31 15 views
9

Angenommen, ich eine Batch-Datei mit dem Namen 'test.cmd' und es enthält einfach:Warum unterscheidet sich die Codierung der Windows-Eingabeaufforderung von einer Batchdatei?

echo %1 

Ich kann dies von der Eingabeaufforderung direkt anrufen mit 'test.cmd some¬arg' und das Ergebnis ist, dass die Zeichenfolge 'some¬arg' gedruckt wird.

Wenn ich jedoch denselben Aufruf in eine zweite Batch-Datei, genannt 'tester.cmd' aus Gründen des Arguments, und ich rufe dies von der Eingabeaufforderung das Ergebnis ist, dass die Zeichenfolge 'some%arg' gedruckt wird.

Was ist es, dass die Codierung vermasselt und wie komme ich um ihn herum? Ich bin sicher, dass ich das schon behoben haben, aber ich kann nicht mehr, wie ...

Dank!

+1

Sind Sie sicher, dass es ein Prozentzeichen ist? Auf meiner Maschine ist es ein "¼". – Tomalak

Antwort

9

Dies liegt daran, Ihre Batch-Datei in einer anderen Codepage codiert ist als cmd.exe zur Zeit in.

In der westlichen Standardkonfigurationen, cmd.exe in CP850 beginnt, aber Text-Editoren arbeiten in der Regel in CP1252 (was wird oft fälschlicherweise als Latin-1 oder ISO-8859-1 bezeichnet).

Die Zeichen „¬“ und „¼“ in diesen beiden Codeseite den gleichen Zeichencode teilen, „BC“.

Die Lösung ist einfach. Codieren Sie entweder Ihre Stapeldatei in Codepage 850, oder wechseln Sie zu Codepage 1252, indem Sie cmd.exe ausgeben, indem Sie chcp 1252 ausgeben.

+0

Also, Ihr Vorschlag Ich kann Chcp 1252 an der Spitze einer Batch-Datei und dann in For-Schleifen Ich würde nicht brauchen, um das doppelte% -Zeichen mehr verwenden? – djangofan

+0

@djangofan Nein, überhaupt nicht. Das doppelte '%%' ist eine Anforderung des Befehlsprozessors selbst und hat nichts mit Zeichencodierung zu tun. – Tomalak

Verwandte Themen