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

问题描述 投票:0回答:1

我正在尝试组织大量 .doc 和 .docx 文件,但它们的“修改日期”和“创建日期”元数据似乎不正确 - 可能在不久前的移动过程中全部丢失。然而,“上次保存日期”和“创建内容”元数据似乎是正确的,所以我想知道:是否可以使用 Powershell 将“修改日期”和“创建日期”字段替换为“上次保存日期”和“内容创建”字段?

powershell
1个回答
1
投票

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 

}
© www.soinside.com 2019 - 2024. All rights reserved.