如何将上次修改的日期替换为上次保存的日期?

时间:2016-02-02 08:34:57

标签: powershell

我试图组织大量的.doc和.docx文件,但看起来他们的"日期修改了"和"创建日期"元数据是不正确的 - 可能它在一段时间内移动时都丢失了。 "上次保存日期"和"内容创建"然而,元数据似乎是正确的,所以我想知道:是否可以使用Powershell替换"日期修改"和"创建日期"字段包含"上次保存日期的信息"和"内容创建"字段?

1 个答案:

答案 0 :(得分:1)

CreationTimeLastWriteTime是文件系统属性,您可以使用get-itempropertyset-itemproperty来获取和设置它们。

Creation dateLast 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 

}