Известно, что bat/cmd файлы выводят текст в кодировке OEM, например, простая команда:
echo текст по-русски
сохранит этот текст в кодировке 866, и Блокнот Windows покажет его так:
⥪бв Ї®-агббЄЁ
Чтобы этот можно было обработать в других программах, приходится прибегать к разным ухищрениям.
Так, в программе nhsms пришлось добавить параметр CodePage для указания, что исходящее смс записано в OEM кодировке.
Или же приходится использовать дополнительные программы nhrt для перекодировки файла:
nhrt -cp:OEM,Unicode 1.txt
Однако, встроенные возможности командного интерпретатора CMD позволяют сохранять текст в Unicode, если запускать этот же командный файл немного по-другому:
cmd /u /c 1.cmd > u.txt
Получившийся файл u.txt имеет кодировку UCS-2 Little Endian без Byte Order Mark и корректно открывается всеми программами, работающими с Unicode.
Что почитать по теме
Справка по cmd на microsoft.com
Syntax
cmd [[{/c|/k}] [/s] [/q] [/d] [{/a|/u}] [/t:fg] [/e:{on|off}] [/f:{on|off}] [/v:{on|off}] string]
как настроить, чтобы cmd файл всегда запускался как /u на http://stackoverflow.com/ — англ.
The Idea is: I don’t know, if this window was startet with /u, but I don’t care. I just start the very same file (%~dpf0) in a new window, which IS started with /u and close the current window. Of course this would mean an enless loop, which I avoid with the additional parameter /unicode. The second run detects that parameter (which has to be the first one) and deletes it (shift). Just add this «header» (until the rem-line) to your Batch.