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.