![将 Word 创建日期提取到文件名中](https://linux22.com/image/1397902/%E5%B0%86%20Word%20%E5%88%9B%E5%BB%BA%E6%97%A5%E6%9C%9F%E6%8F%90%E5%8F%96%E5%88%B0%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD.png)
我有一些 Word 文档,其创建日期各不相同(doc
和docx
)。我想重命名文件以包含此创建日期。这可能吗?这不是文件系统上一次更改File->Info->Properties
日期,这是Word 内部可查看的 Word 创建日期
例如,我想将文档重命名Summary meeting 123.doc
为123 2010-01-01 Summary meeting 123
。123 部分可以通过简单的正则表达式实现,但我如何获取文件创建日期?
另一个解决方案是将文件系统的最后修改日期设置为内部单词创建日期。
答案1
使用此 PowerShell 脚本:(在此处找到:http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/02/use-powershell-to-find-specific-word-built-in-properties.aspx)
编辑2:编辑脚本以匹配您的特定场景。
Param(
$path = "Q:\Test",
[array]$include = @("*.docx","*.docx")
)
$application = New-Object -ComObject word.application
$application.Visible = $false
$binding = "System.Reflection.BindingFlags" -as [type]
[ref]$SaveOption = "microsoft.office.interop.word.WdSaveOptions" -as [type]
## Get documents
$docs = Get-childitem -path $Path -Recurse -Include $include #Remove -Recurse if you dont want to include subfolders.
## Iterate documents
foreach($doc in $docs)
{
try
{
## Get document properties:
$document = $application.documents.open($doc.fullname)
$BuiltinProperties = $document.BuiltInDocumentProperties
$pn = [System.__ComObject].invokemember("item",$binding::GetProperty,$null,$BuiltinProperties,"Creation Date")
$value = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$pn,$null)
## Clean up
$document.close([ref]$saveOption::wdDoNotSaveChanges)
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($BuiltinProperties) | Out-Null
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($document) | Out-Null
Remove-Variable -Name document, BuiltinProperties
## Rename document:
if($doc.PSChildName -match "^(.+)(\d{3})(.+)$") # Matches "(Summary meeting )(123)(.doc)"
{
$date=$value.ToString('yyyy-MM-dd');
$newName = "$($matches[2]) $($date) $($matches[1])$($matches[2])$($matches[3])";
write-host $newName;
Rename-Item $doc $newName
}
}
catch
{
write-host "Rename failed."
$_
}
}
## Clean up
$application.quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($application) | Out-Null
Remove-Variable -Name application
[gc]::collect()
[gc]::WaitForPendingFinalizers()
将 $path 变量更改为您的文档所在的文件夹。
使用您需要的任何额外逻辑编辑 #Rename 部分,我添加的正则表达式与您在帖子中提供的特定示例相匹配,对其进行调整,使其与您的所有文档相匹配。可以使用“matches[]”数组引用(括号)内的任何模式,从索引 1 开始。
我建议注释掉“Rename-Item”行,直到您确定“$newName”是正确的。在“$newName=”行中变量周围添加额外的 $() 是为了扩展变量。
附言: 确保启用 powershell 脚本的运行,以管理员身份打开 PS 并输入:“Set-ExecutionPolicy RemoteSigned”)