Цитата shadowbat:
Для одного файла работает »
|
Работает?! Так не бывает...вернее, в таком виде работать не будет и не должно...
Цитата shadowbat:
Это же можно сделать и через bat? »
|
Можно поинтересоваться почему именно в cmd требуется? В смысле, не совсем понятно, зачем привлекать в систему посторонние средства, если в ней уже заложены инструменты для решения задачи?
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
Выше предложили уже вариант на 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
- кроме того, этот вариант не добавляет пустую строку в конец файла...