Batch DOCX Renamer

0

Resumindo, recuperei muitos dados apagados de um disco rígido de amigos. Eu posso organizar MP3 e JPEGs sem problemas, mas eu não consigo encontrar um programa que irá usar os metadados de um arquivo DOCX para renomear o nome. Eu só quero usar o título do documento como nome de arquivo.

Alguém conhece um programa que pode fazer isso?

Obrigado

    
por amof 30.01.2013 / 01:49

2 respostas

1

Um docx é na verdade um zip com um monte de coisas em XML dentro. O título é dc:title dentro de docProps/core.xml .

EDIT: Escreveu um script python rápido para fazer isso.

#!/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')

Ele processará qualquer coisa dada a ele como argumentos de linha de comando. Se um arquivo não tiver um título, ele informará e ignorará; diferente disso, sem tratamento de erros. Tudo o que ele usa deve estar na biblioteca padrão.

    
por 30.01.2013 / 04:43
0

O seguinte script do Windows demonstra como obter o título do documento. Você vai querer criar um arquivo que termine com ".wsf" e cole isso nele. Obviamente, você iterará seus arquivos e os renomeará conforme for indo. Essa é a parte fácil. Esta é a parte "difícil" e mostrada apenas como obter o título.

Eu tenho o CScript definido como meu mecanismo de script padrão. Caso contrário, você pode executar seu script a partir da linha de comando:

CScript yourScriptName.wsf

Você pode tornar o CScript o mecanismo padrão por:

CScript //H:CScript

Depois de fazer isso, seu script será executado apenas digitando o nome dele:

yourScriptName.wsf

Você precisará do DSOFile da 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>
    
por 30.01.2013 / 05:52