У меня есть папка с текстовыми файлами, которая включает в себя другие папки, и они также содержат некоторые текстовые файлы. Мне нужно рекурсивно преобразовать все эти файлы в кодировку UTF-8 в PowerShell и сохранить структуру папок во время этого процесса. Я попробовал это:
foreach( $i in get-childitem -recurse -name ) {
get-content $i | out-file -encoding utf8 -filepath some_folder/$i
}
Но это не работает, оно не может воспроизвести иерархию папок. Как мне справиться с этой проблемой?
windows-7
conversion
powershell
Римский
источник
источник
Get-ChildItem
но нетGet-Children
...Ответы:
Попробуй это.
Он захватывает полный путь к файлу и заменяет текущий каталог тем, который вам нужен. Например, вы запускаете эту команду в каталоге
C:\1\
($PWD = C:\1\
). Если он найдет файлC:\1\2\file.txt
, он даст вам$dest
офsome_folder\2\file.txt
.Первый блок if есть, поэтому вы не пытаетесь конвертировать каталог.
Каталоги должны быть созданы, если они еще не существуют - я изначально забыл это.
Если вы хотите UTF8 без спецификации, замените
get-content $i | out-file -encoding utf8 -filepath $dest
строку следующим ( источник ):Обратите внимание, что это может быть не очень эффективно для больших файлов, так как он читает целые файлы в память, прежде чем записать их снова. Если требуется эффективность, можно читать строку за строкой или даже определенное количество байтов за раз. Однако я бы предпочел просто написать быструю программу на C # к этому моменту (так как в любом случае вы будете использовать функции .NET в PS).
источник
some_folder
?$PWD
должен автоматически ссылаться на текущий рабочий каталог."some_folder"
должен быть заменен на соответствующую папку.Использование: & "TextEncoding.ps1" -path "c: \ windows \ temps \ folder1" -encoding "UTF8"
Вот сценарий, который я создал:
источник