1

Привет я хотел бы автоматически собрать общее время редактирования из многих документов Word .docx, расположенных в указанной папке. Можно ли, например, через Powershell прочитать такие свойства документа Word?

1 ответ1

3

Да, и если вы хотите покопаться во внутренних файлах, вам даже не нужно устанавливать Word на компьютер, который выполняет поиск! Документы Word на самом деле представляют собой ZIP-файлы с кучей маленьких файлов внутри. В папке docProps есть файл app.xml который содержит различные свойства документа. Общее время редактирования (в минутах) указано в элементе <TotalTime> внутри элемента <Properties> .

Я написал этот сценарий PowerShell, чтобы сложить время для каждого файла DOCX в текущем каталоге:

Add-Type -AssemblyName System.IO.Compression.FileSystem
$totalmins = 0
dir -File | ? {$_.Extension -like '.docx'} | % {
    $zip = [System.IO.Compression.ZipFile]::Open($_.FullName, 'Read')
    $propsentry = $zip.GetEntry('docProps/app.xml')
    If ($propsentry -ne $null) {
        $stream = $propsentry.Open()
        $reader = New-Object System.IO.StreamReader $stream
        $content = $reader.ReadToEnd()
        $xmldoc = [xml]$content
        $totalmins += $xmldoc.Properties.TotalTime
    }
    $zip.Dispose()
}
$totalmins

Интересные части просто используют класс .NET ZipFile для перемещения по документу, затем он преобразует содержимое целевого файла в документ XML, получает число и добавляет его в переменную $totalmins , которая выводится в самом конце.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .