Привет я хотел бы автоматически собрать общее время редактирования из многих документов Word .docx, расположенных в указанной папке. Можно ли, например, через Powershell прочитать такие свойства документа Word?
1 ответ
Да, и если вы хотите покопаться во внутренних файлах, вам даже не нужно устанавливать 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
, которая выводится в самом конце.