您好,我想自动收集指定文件夹中多个 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
有趣的部分只是使用.NETZipFile
类在文档内部进行探索,然后将目标文件的内容转换为 XML 文档,获取编号并将其添加到变量中$totalmins
,最后打印出来。