长话短说,我恢复了朋友硬盘上删除的大量数据。我可以毫无问题地整理 MP3 和 JPEG,但我找不到可以使用 DOCX 文件的元数据重命名的程序。我只想使用文档标题作为文件名。
有人知道可以做到这一点的程序吗?
谢谢
答案1
docx 实际上是一个 zip 文件,里面有一堆 XML 内容。标题就dc:title
在里面docProps/core.xml
。
编辑:编写了一个快速的 Python 脚本来完成它。
#!/usr/bin/env python
from sys import argv
from zipfile import ZipFile
from xml.etree import ElementTree
from os import rename
for arg in argv[1:]:
data = ZipFile(arg, 'r')
props = data.read('docProps/core.xml')
tree = ElementTree.fromstring(props)
element = tree.find('{http://purl.org/dc/elements/1.1/}title')
title = element.text
if title is None:
print(arg + ' has no title :(')
else:
rename(arg, title + '.docx')
它会处理作为命令行参数提供给它的任何内容。如果文件没有标题,它会告诉您并跳过它;除此之外,没有错误处理。它使用的所有内容都应该在标准库中。
答案2
以下 Windows 脚本演示了如何获取文档标题。您需要创建一个以“.wsf”结尾的文件并将其粘贴到其中。显然,您将遍历文件并随时重命名它们。这是简单的部分。这是“困难”的部分,仅显示如何获取标题。
我已将 CScript 设置为默认脚本引擎。如果没有,您可以通过以下方式从命令行运行脚本:
CScript yourScriptName.wsf
您可以通过以下方式将 CScript 设为默认引擎:
CScript //H:CScript
完成这些之后,只需输入脚本名称即可运行:
yourScriptName.wsf
你需要DSO文件来自微软。
<package>
<job id="MyJob">
<?job error="true" debug="false" ?>
<script language="VBScript">
Option Explicit
'''
' Start of main program
'
Dim filename
Dim title
filename = "testfile.doc"
title = getTitle( filename )
WScript.Stdout.WriteLine title
WScript.Quit
' Needs DSOFile from http://www.microsoft.com/en-us/download/details.aspx?id=8422
Function getTitle( filename )
Dim objFile
Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open( filename )
getTitle = TrimEx(objFile.SummaryProperties.Title)
End Function
Function TrimEx(str)
Dim retval
Dim re
Set re = New RegExp
re.Pattern = "^\s*"
re.Multiline = False
retval = re.Replace(str, "")
re.Pattern = "\s*$"
TrimEx = re.Replace(retval, "")
End Function
</script>
</job>
</package>