Проблемы с кодированием при объединении с Powershell

Из группы файлов я хочу объединить все файлы, имя которых начинается с 1, в текстовый файл с именем 1.txt. Кодировка исходных файлов - UTF16-LE, и она также должна быть кодировкой целевого файла. Но использование моего сценария PowerShell (код ниже) приводит к созданию файла UTF-8 со специальными знаками дефекта (умляуты и т. Д.).

Это мой код:

Powershell.exe cat  Disc:\data\files\1\filename-1* > Path:\here\1.txt

Я нашел несколько подходов с использованием Get-Content и Out-File, но не смог адаптировать эти команды к моим потребностям с подстановочными знаками. Насколько я понимаю, cat - это стандартный псевдоним get-content, поэтому мне интересно, почему я не могу просто заменить cat на get-content. Кроме того, get-content имеет параметр -Encoding CharSet, но меняет мой код следующим образом:

Powershell.exe cat  Disc:\data\files\1\filename-1* > Path:\here\1.txt -encode Unicode

(который является кодировкой для порядка байтов с прямым порядком байтов в формате UTF-16) ничего не меняет. Ни BigEndianUnicode, ни UTF8.

Спасибо за любую помощь!


person Largo    schedule 01.12.2014    source источник


Ответы (1)


Вы не можете указать кодировку при использовании оператора перенаправления (>). Вместо этого используйте командлет Out-File:

Get-Content C:\path\to\input* | Out-File D:\path\to\output.txt -Encoding Unicode
person Ansgar Wiechers    schedule 01.12.2014
comment
Спасибо - это хорошо! Но почему-то ваш код тоже не работает. Вот что я сделал: 'Powershell.exe Get-Content J: \ path \ content \ name1 * -Encoding Unicode | Powershell.exe Out-File J: \ newpath \ 1.txt -Encoding Unicode 'Я пробовал использовать Powershell.exe и без него после канала, но, похоже, это необходимо. И я пробовал только с одним -Encoding, как и в вашем коде. Но единственный результат - пустой файл 1.txt. - person Largo; 01.12.2014
comment
@Daniel Где именно в моем ответе вы видите Get-Content -Encoding Unicode или powershell.exe? Код предназначен для запуска из командной строки PowerShell. Если вы хотите запустить его откуда-то еще (например, из командной строки), вам нужно запустить его следующим образом: powershell.exe -Command "& { Get-Content ... }" - person Ansgar Wiechers; 01.12.2014
comment
@Daniel, может быть, вы можете предоставить образец текста, который вы пытаетесь прочитать и сохранить, чтобы мы могли его увидеть. Я попробовал код Ансгара с японским, и он сработал. - person Micky Balladelli; 01.12.2014
comment
@AnsgarWiechers Извините, я подумал, что упомянул о своем намерении использовать код в пакетном файле;) После редактирования, как вы сказали, наконец-то получилось, большое спасибо. - person Largo; 02.12.2014