полезный ответ Кичика показывает эффективное решение, использующее только функции пакетного файла.
Если вам не нужно создавать файлы с кодировкой , отличной от ASCII или активной кодовой страницей OEM, подключать PowerShell не нужно - это только замедлит работу.
Тем не менее, вы можете выбрать другую кодовую страницу через chcp
в cmd.exe
, но для вывода в файл только 65001
для UTF-8 действительно имеет смысл, но обратите внимание, что результирующий файл будет иметь нет спецификация - в отличие от использования Out-File -Encoding utf8
в Windows PowerShell.
Если вам нужно использовать PowerShell - например, для создания файлов UTF-16LE ("Unicode") или файлов UTF-8 с спецификацией - вам придется использовать $Input
с PowerShell -внутренний канал в вашей команде PowerShell для доступа к потоку stdin (т. е. к тому, что было передано по каналу):
prog.exe file.txt | powershell -c "$Input | Out-File results\file.txt -Encoding ascii"
Обратите внимание, что только символы, представляемые в активной кодовой странице (как показано в chcp
), будут распознаваться PowerShell и могут быть преобразованы в потенциально разные кодировки.
Выбор -Encoding ascii
фактически транслитерирует символы вне (7-битного) диапазона ASCII до литерал ?
символов, что приведет к потере информации .