Пакетный DOCX Renamer
Короче говоря, я восстановил много данных, удаленных с жесткого диска друзей. Я могу организовать MP3 и JPEG без проблем, но я не могу найти программу, которая будет использовать метаданные файла DOCX для переименования имени. Я просто хочу использовать название документа в качестве имени файла.
Кто-нибудь знает программу, которая может сделать это?
Спасибо
2 ответа
Docx на самом деле представляет собой почтовый индекс с кучей вещей внутри 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')
Он будет обрабатывать все, что ему дано в качестве аргументов командной строки. Если файл не имеет заголовка, он сообщит вам и пропустит его; кроме этого, нет обработки ошибок. Все, что он использует, должно быть в стандартной библиотеке.
Следующий скрипт Windows демонстрирует, как получить заголовок документа. Вы захотите создать файл с расширением.wsf и вставить его в него. Obvoiusly, вы будете перебирать файлы и переименовывать их по мере необходимости. Это легкая часть. Это самая "трудная" часть и показана только как получить титул.
У меня установлен CScript в качестве движка скриптов по умолчанию. Если вы этого не сделаете, вы можете запустить свой скрипт из командной строки:
CScript yourScriptName.wsf
Вы можете сделать CScript движком по умолчанию:
CScript //H:CScript
Как только вы это сделаете, ваш скрипт запустится, просто набрав его имя:
yourScriptName.wsf
Вам понадобится DSOFile от Microsoft.
<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>