Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Слияние txt и вывод всех файлов в Unicode (http://forum.oszone.net/showthread.php?t=311787)

ask2886 19-02-2016 13:00 2607893

Слияние txt и вывод всех файлов в Unicode
 
Добрый день! Есть множество txt файлов в определенной папке. Подскажите как их все переделать в кодировку Unicode (UCS-2 LE BOM)

P.S. Началось с того, что требовалось собрать объединение содержимого (есть русский язык) одноимённых текстовых файлов из нескольких соседних директорий.
Нашел код:
Код:

@echo off
chcp 1251
2>nul del/a/f *.txt
 
for /f "delims=" %%i in ('2^>nul dir/a-d/b/s "*.txt"') do (
 set "*%%~nxi=*"
)
for /f "delims=*=" %%i in ('set *') do (
 for /f "delims=" %%j in ('2^>nul dir/a-d/b/s "%%i"') do (
  <"%%j">>"%%i" more
 )
)
 
exit/b

В конечном итоге все файлики меняли свою кодировку с Unicode (UCS-2 LE BOM) на ANSI (win 1251). Как сделать так чтобы кодировка файлов оставалась неизменной?


P.S.S.
Видел такую схему для смены перекодировки:
Код:

@Echo Off
SetLocal EnableExtensions

Set $FILE=File.txt
Set $TEMP=File.tmp

CHCP 1251
Echo яю>%$TEMP%
CMD /U /C Type %$FILE% >>%$TEMP%

If Exist %$TEMP% DEL /F/Q %$FILE%
REN %$TEMP% %$FILE%

В итоге в каждом файле появлялся квадратик в начале 1-ой строки.

Iska 19-02-2016 13:32 2607906

Цитата:

Цитата ask2886
Как сделать так чтобы кодировка файлов оставалась неизменной? »

Использовать WSH/PoSH.

Опиум 19-02-2016 14:07 2607922

другое порой напрягает.
Когда копи-пасте операцию выполняешь русского текста из non-Unicode приложения в Unicode-приложение.
Как правило вставляет кракозябры.
Может изобретаю велосипед, но пришлось делать перекодировщик для clipboard, который это поправляет.

ask2886 19-02-2016 14:32 2607928

Цитата:

Цитата Iska
Использовать WSH/PoSH. »

А если пойти по 2-ому пути: допустим что все файлики поменяли кодировку, как второй батник применить к множеству текстовых файлов, а затем в каждом txt удалить первый символ 1ой строки?

Iska 19-02-2016 15:34 2607955

Цитата:

Цитата Опиум
Когда копи-пасте операцию выполняешь русского текста из non-Unicode приложения в Unicode-приложение.
Как правило вставляет кракозябры.
Может изобретаю велосипед, но пришлось делать перекодировщик для clipboard, который это поправляет. »

Достаточно просто переключить язык ввода в приложении перед копированием на русский.

Я же лично тупо делаю подмену кодовых страниц Windows (1252--->1251 и т.д.). Говорят, могут быть некоторые проблемы, но я пока не сталкивался.

Цитата:

Цитата ask2886
А если пойти по 2-ому пути: »

ask2886, проще не идти.

Если опишете исходную задачу, думаю, Вам помогут.

Опиум 19-02-2016 15:51 2607962

Цитата:

Цитата Iska
тупо делаю подмену кодовых страниц Windows (1252--->1251 и т.д.). »

да, на какихто компах у меня поправлен так реестр.

А про предварительное переключение раскладки - не слылшал. Век живи - век учись (с)

Iska 19-02-2016 16:00 2607967

Цитата:

Цитата Опиум
А про предварительное переключение раскладки - не слылшал. »

Угу. То есть, оно бы как бы и не обязательно делать подмену, просто у меня умолчальным языком ввода стоит, как правило, en-us.

ask2886 19-02-2016 16:20 2607973

Цитата:

Цитата Iska
Если опишете исходную задачу, думаю, Вам помогут. »

Ну собственно исходная задача, это объединение содержимого одноимённых текстовых файлов (кодировка Unicode), находящиеся в соседних папках. Полученные файлы должны быть тоже в кодировке unicode.

Iska 19-02-2016 16:22 2607974

Цитата:

Цитата ask2886
находящиеся в соседних папках. »

  1. Что значит «в соседних»? Поясните.
  2. В каком порядке должно осуществляться слияние? Или это несущественно?

ask2886 19-02-2016 16:58 2607987

Цитата:

Цитата Iska
Что значит «в соседних»? Поясните.
В каком порядке должно осуществляться слияние? Или это несущественно? »

Может не совсем корректно выразился: имелось ввиду: есть папка, в ней - папка1, папка2, папка3.
Слияние осуществлять следующим образом:

файл1.txt папки1
1строка
2строка
файла1.txt папки2
3строка
4строка
файл1.txt папки3
5стркоа
6строка
в итоге:
файл1.txt
1строка
2строка
3строка
4строка
5строка
6строка
и так со всеми файлами, имеющие одинаковые названия в разных папках.

Foreigner 20-02-2016 09:28 2608210

ask2886, Если кодировка UTF-8, то достаточно обычной консоли, если unicode (UTF-16), то тогда необходимо запустить cmd с ключом /u. После этого просто перенаправляете вывод нужных файлов в результирующий:
Код:

type 1.txt 2.txt > 3.txt

Опиум 24-02-2016 16:33 2609664

Цитата:

Цитата Iska
Угу. То есть, оно бы как бы и не обязательно делать подмену, просто у меня умолчальным языком ввода стоит, как правило, en-us. »

специально проверил сейчас - не работает((
неюникодовская гуёвина выдала сообщение на русском (в memo)
копи - пасте(в аутлук 2003)- краказябры. Независимо от включенной расладки на момент пасте.

Iska 24-02-2016 16:59 2609687

Цитата:

Цитата Опиум
Независимо от включенной расладки на момент пасте. »

Добавьте к этому (точнее, предварите это) «язык ввода русский» на момент copy.


Время: 10:58.

Время: 10:58.
© OSzone.net 2001-