Войти

Показать полную графическую версию : Слияние txt и вывод всех файлов в Unicode


ask2886
19-02-2016, 13:00
Добрый день! Есть множество 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
Как сделать так чтобы кодировка файлов оставалась неизменной? »
Использовать WSH/PoSH.

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

ask2886
19-02-2016, 14:32
Использовать WSH/PoSH. »
А если пойти по 2-ому пути: допустим что все файлики поменяли кодировку, как второй батник применить к множеству текстовых файлов, а затем в каждом txt удалить первый символ 1ой строки?

Iska
19-02-2016, 15:34
Когда копи-пасте операцию выполняешь русского текста из non-Unicode приложения в Unicode-приложение.
Как правило вставляет кракозябры.
Может изобретаю велосипед, но пришлось делать перекодировщик для clipboard, который это поправляет. »
Достаточно просто переключить язык ввода в приложении перед копированием на русский.

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

А если пойти по 2-ому пути: »
ask2886, проще не идти.

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

Опиум
19-02-2016, 15:51
тупо делаю подмену кодовых страниц Windows (1252--->1251 и т.д.). »
да, на какихто компах у меня поправлен так реестр.

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

Iska
19-02-2016, 16:00
А про предварительное переключение раскладки - не слылшал. »
Угу. То есть, оно бы как бы и не обязательно делать подмену, просто у меня умолчальным языком ввода стоит, как правило, en-us.

ask2886
19-02-2016, 16:20
Если опишете исходную задачу, думаю, Вам помогут. »
Ну собственно исходная задача, это объединение содержимого одноимённых текстовых файлов (кодировка Unicode), находящиеся в соседних папках. Полученные файлы должны быть тоже в кодировке unicode.

Iska
19-02-2016, 16:22
находящиеся в соседних папках. »

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

ask2886
19-02-2016, 16:58
Что значит «в соседних»? Поясните.
В каком порядке должно осуществляться слияние? Или это несущественно? »
Может не совсем корректно выразился: имелось ввиду: есть папка, в ней - папка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
ask2886, Если кодировка UTF-8, то достаточно обычной консоли, если unicode (UTF-16), то тогда необходимо запустить cmd с ключом /u. После этого просто перенаправляете вывод нужных файлов в результирующий:

type 1.txt 2.txt > 3.txt

Опиум
24-02-2016, 16:33
Угу. То есть, оно бы как бы и не обязательно делать подмену, просто у меня умолчальным языком ввода стоит, как правило, en-us. »
специально проверил сейчас - не работает((
неюникодовская гуёвина выдала сообщение на русском (в memo)
копи - пасте(в аутлук 2003)- краказябры. Независимо от включенной расладки на момент пасте.

Iska
24-02-2016, 16:59
Независимо от включенной расладки на момент пасте. »
Добавьте к этому (точнее, предварите это) «язык ввода русский» на момент copy.




© OSzone.net 2001-2012