|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] конвертировать ANSI в Unicode с фильтром |
|
|
CMD/BAT - [решено] конвертировать ANSI в Unicode с фильтром
|
Старожил Сообщения: 267 |
Помогите доделать скрипт, чтобы в заданной папке поменять кодировку с ANSI на Unicode у всех файлов
с выбором фильтра, например только "*.txt" файлы или только "*.ini" или только "*file*.txt" тут в примере только по одному файлу вручную забивать, да и "%tmp%" не работает, приходится писать "set tmp=D:\1.txt" :ToUNICODE src dst -- converts a file to UNICODE :: -- src [in] - source file name to be converted :: -- trg [in,opt] - target file name, leave blank for in-place conversion SETLOCAL set src=%~1 set trg=%~2 set tmp=%temp%.\%~nx1 if "%trg%"=="" set trg=%src% cmd /U /c type "%src%">"%tmp%" move /y "%tmp%" "%trg%" EXIT /b |
|
Отправлено: 20:54, 22-03-2019 |
Ветеран Сообщения: 20133
|
Профиль | Отправить PM | Цитировать shadowbat, iconv.exe в качестве альтернативы не смотрели.
Точно её возможности не знаю, но посмотреть можно. самый простой пример Более сложный через ТЕМП, если проблемы |
------- Последний раз редактировалось yurfed, 22-03-2019 в 21:58. Отправлено: 21:41, 22-03-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:47, 22-03-2019 | #3 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Да, можно UTF-16LE/1200 Можно с BOM Но, насколько я понимаю "cmd /U /c type" не позволяет настраивать такие параметры как вид Юникода и BOM? и создаёт UTF-16LE/1200 без BOM, это не критично Цитата Iska:
|
||
Последний раз редактировалось shadowbat, 22-03-2019 в 22:10. Отправлено: 22:00, 22-03-2019 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 22:12, 22-03-2019 | #5 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать 1.
Для одной папки работает, как сделать, чтобы он работал на папку с подкаталогами? (нужно добавить в %PATH% путь к iconv) 2. Как добавить сюда работу с подкаталогами? (без добавления в %PATH%) Работает только для одной папки all.cmd: txt.cmd: iconv2.cmd: |
Последний раз редактировалось shadowbat, 23-03-2019 в 07:59. Отправлено: 01:24, 23-03-2019 | #6 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
Цитата shadowbat:
CMD утилита iconv имеет свой синтаксис, скачивать её для проверки - нет желания, так что проверьте строку для её запуска, перед использованием... set "fld=c:\1\" set "flt=*.txt" pushd "%fld%" for /f "delims=" %%x in ('dir /b/s/a-d "%flt%"') do ( iconv --binary -f windows-1251 -t UTF-8 %%x ) popd Выше предложили уже вариант на powershell... Его можно ускорить в обработке: $fld = 'c:\1' $flt = '*.txt' # default - кодировка активной кодовой страницы системы. $encin = 'default' # unicode - кодировка UTF-16 LE $encout = 'unicode' dir $fld -filt $flt -file -rec|%{ ($content = gc $_.fullname -enc $encin -raw)| sc $_.fullname -enc $encout } $fld = 'c:\1' $flt = '*.txt' # Доступные кодировки: [text.encoding]::getencodings() $encin = [text.encoding]::getencoding("windows-1251") $encout = [text.encoding]::getencoding("utf-16") filter recode-file { $content = [io.file]::readalltext($_.fullname, $encin) [io.file]::writealltext($_.fullname, $content, $encout) } dir $fld -filt $flt -file -rec|recode-file |
||
------- Последний раз редактировалось YuS_2, 23-03-2019 в 09:05. Отправлено: 08:38, 23-03-2019 | #7 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать cmd:
chcp 1251 set "fld=C:\111\" set "flt=*.txt" pushd "%fld%" for /f "delims=" %%x in ('dir /b/s/a-d "%flt%"') do ( chcp 1251 > nul CMD /U /C Type "%%x" > "%%xtemp" del "%%x" move "%%xtemp" "%%x" ) chcp 1251 set "fld=C:\111\" set "flt=*.txt" pushd "%fld%" for /f "delims=" %%x in ('dir /b/s/a-d "%flt%"') do ( iconv --binary -f windows-1251 -t UTF-16LE "%%x" > "%%xtemp" del "%%x" move "%%xtemp" "%%x" ) Цитата YuS_2:
Никто же не говорит, что решение на PS плохое или нерабочее, но почему бы не иметь два разных вида решений (PS и bat), и уже из них выбирать? Прогон на тестовой сборке: cmd 141сек UTF-16LE-BOM iconv 95сек UTF-16LE-BOM PowerShell ($sContent = Get-Content) 60сек UTF-16LE+BOM, лишняя строка в конце PowerShell ($content = gc) 47сек UTF-16LE+BOM, лишняя строка в конце PowerShell ($content = [io.file]) 40сек UTF-16LE+BOM все пять решений работают с подпапками в режиме замены старых файлов |
|
Последний раз редактировалось shadowbat, 23-03-2019 в 17:16. Отправлено: 16:51, 23-03-2019 | #8 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
расставить везде стороннее приложение и запускать его - это не "через bat", и по сложности аналогично обновлению PoSh до актуальной версии переписать под старую версию PoSh несложно |
|
Отправлено: 17:46, 23-03-2019 | #9 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 18:02, 23-03-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Какой прогр. или фильтром исправить такое ? | micro8 | Видео и аудио: обработка и кодирование | 4 | 27-11-2012 21:35 | |
VBS/WSH/JS - [решено] ansi в utf-8 | aggressor_ | Скриптовые языки администрирования Windows | 3 | 19-10-2012 06:46 | |
В Windows 8 появится функция проверки файлов фильтром SmartScreen | OSZone News | Новости и события Microsoft | 0 | 09-04-2011 11:30 | |
Графика - Графический конвертер с фильтром прозрачности. | killmuk | Программное обеспечение Windows | 0 | 02-11-2008 14:16 | |
Nvidia GeForce 6100 Onboard - Проблема с фильтром дыма | Cone | Видеокарты | 14 | 05-11-2007 19:30 |
|