Пакетное переименование DOCX

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

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

спасибо

6
задан Journeyman Geek
16.01.2023 23:05 Количество просмотров материала 2586
Распечатать страницу

2 ответа

docx на самом деле zip с кучей вещей в XML внутри. Заголовок dc:title внутри docProps/core.xml.

EDIT: написал быстрый скрипт 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')

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

1
отвечен qmega 2023-01-18 06:53

следующий сценарий Windows демонстрирует, как получить заголовок документа. Вы хотите создать файл, который заканчивается ".wsf " и вставить это в него. Obvioiusly, вы будете перебирать файлы и переименовывать их, как вы идете. Это самая простая часть. Это "трудная" часть и показано только, как получить титул.

у меня 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>
0
отвечен BillP3rd 2023-01-18 09:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх