批量 DOCX 重命名器

批量 DOCX 重命名器

长话短说,我恢复了朋友硬盘上删除的大量数据。我可以毫无问题地整理 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>

相关内容