Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Кодировка DOCX файлов в Powershell

#кодировка #powershell


Доброго времени! есть куча docx файлов, в которых ищется ФИО, переводится в переменную,
а затем используется для переименования файла. так вот, поиск заканчивается неудачей
т.к. powershell не понимает кодировку docx файлов. с txt-файлами в кодировки UTF-8
все отрабатывает замечательно

$pathtball = "C:\Users\Vasiliy\Desktop\BPM\treb\*"

$readfolders = Get-ChildItem $pathtball
foreach ($pathtbone in $readFolders)
{
    $index = [System.IO.File]::ReadAllText($pathtbone)

    # Индекс начала
    $IndexStart1 = $index.IndexOf("Уважаемый (ая) ")
    # Индекс конца
    $IndexEnd1 = $index.IndexOf("!")
    $indextotal1 = $index.Substring($IndexStart1, $IndexEnd1-$IndexStart1)
    $indextotal2 = $index.Substring($IndexStart2, $IndexEnd2-$IndexStart2)
}


Ошибка следующая


  Исключение при вызове "Substring" с "2" аргументами: "Значение
  StartIndex не может быть меньше нуля. Имя параметра: startIndex"
  C:\Users\Vasiliy\Desktop\BPM\renameallfilesv1.ps1:20 знак:36
  +     $indextotal1 = $index.Substring <<<< ($IndexStart1, $IndexEnd1-$IndexStart1)
      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : DotNetMethodException

    


Ответы

Ответ 1



Файл .docx - документ, созданный с помощью Microsoft Word 2007 или более новой версии Office. Формат файла основан на Open XML и использует сжатие по алгоритму ZIP для уменьшения размера файла. Через обычный редактор он откроется, но понять, что там написано, вы не сможете. Исходя из выше изложенного изменение кодировки данного текста не поможет. Чтобы прочесть файл docx в powershell, вам необходимо скачать и установить Open-Xml-PowerTools. Использую команду: (Select-OpenXmlString -path $file_name).content Где переменная $file_name является файлом "*.docx", который требуется прочесть. Спасибо insolor, Senior Pomidor, 1d0 за оказанную помощь.

Комментариев нет:

Отправить комментарий