Короче говоря, я восстановил много данных, удаленных с жесткого диска друзей. Я могу организовать MP3 и JPEG без проблем, но я не могу найти программу, которая будет использовать метаданные файла DOCX для переименования имени. Я просто хочу использовать название документа в качестве имени файла.

Кто-нибудь знает программу, которая может сделать это?

Спасибо

2 ответа2

1

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')

Он будет обрабатывать все, что ему дано в качестве аргументов командной строки. Если у файла нет заголовка, он сообщит вам и пропустит его; кроме этого, нет обработки ошибок. Все, что он использует, должно быть в стандартной библиотеке.

0

Следующий скрипт 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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .