我试图组织大量的.doc和.docx文件,但看起来他们的"日期修改了"和"创建日期"元数据是不正确的 - 可能它在一段时间内移动时都丢失了。 "上次保存日期"和"内容创建"然而,元数据似乎是正确的,所以我想知道:是否可以使用Powershell替换"日期修改"和"创建日期"字段包含"上次保存日期的信息"和"内容创建"字段?
答案 0 :(得分:1)
CreationTime
和LastWriteTime
是文件系统属性,您可以使用get-itemproperty
和set-itemproperty
来获取和设置它们。
Creation date
和Last save time
是特定于字词的属性。
The Scripting Guy告诉您如何阅读它们。
阅读完毕后,请使用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
}