我正在尝试组织大量 .doc 和 .docx 文件,但它们的“修改日期”和“创建日期”元数据似乎不正确 - 可能在不久前的移动过程中全部丢失。然而,“上次保存日期”和“创建内容”元数据似乎是正确的,所以我想知道:是否可以使用 Powershell 将“修改日期”和“创建日期”字段替换为“上次保存日期”和“内容创建”字段?
CreationTime
和 LastWriteTime
是文件系统属性,您可以使用 get-itemproperty
和 set-itemproperty
获取和设置它们。
Creation date
和 Last save time
是特定于单词的属性。
脚本专家 告诉您如何阅读它们。
阅读后,请使用 set-itemproperty
设置它们。
以下示例介绍了如何读取两个字属性并将它们写入当前目录中所有
*.doc
和 *.docx
文件的文件系统属性。
$includeExtensions = @(".doc", ".docx")
$path = "."
$docs = Get-ChildItem -Path $path | ?{$includeExtensions -contains $_.Extension}
foreach($doc in $docs) {
$application = New-Object -ComObject word.application
$application.Visible = $false
$document = $application.documents.open($doc.FullName)
$binding = "System.Reflection.BindingFlags" -as [type]
$properties = $document.BuiltInDocumentProperties
$lastsavetime = $null
$creationdate = $null
foreach($property in $properties)
{
$pn = [System.__ComObject].invokemember("name",$binding::GetProperty,$null,$property,$null)
trap [system.exception]
{
continue
}
if($pn -eq "Last save time") {
$lastsavetime = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null)
} elseif ($pn -eq "Creation date") {
$creationdate = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null)
}
}
$document.Close()
$application.quit()
"Setting " + $doc.FullName
Set-ItemProperty $doc.FullName -Name "Creationtime" -Value $creationdate
Set-ItemProperty $doc.FullName -Name "LastWriteTime" -Value $lastsavetime
}