docx renamer Word文書のファイル名を タイトル+最終更新日
多様なサブディレクトリに置かれたワード文書を、このスクリプトを起動した地点に移動させ、かつ
ファイル名を、
"元の名前.docx"
から
"元の名前_メタデータに書かれたタイトル名_最終更新日.docx"
に変更するスクリプトです。
この操作は、非可逆に、大量に操作するので、元の文書はバックアップを取って様子を確認してから使ってみてください。
// ワード文書名に、タイトルと変更日のメタタグを追加する。 // 変更例 : 文書13.docx --> 文書13-Groovyでお掃除-20120117.docx startDir = "." new File(startDir).eachFileRecurse { file -> if (file.isFile() && file.name.endsWith("docx")){ new AntBuilder().unzip(src: file, dest:'/OUTPUT') { patternset { include(name: '**/core.xml') } mapper(type: 'flatten') } println file docxcore = new groovy.util.XmlParser().parse("/OUTPUT/core.xml") title = docxcore.toString().replaceAll(/(.*title\[attributes\=\{\}; value=\[)([^\]]*)(\]\], \{http:\/\/purl.*)/) {m0,m1,m2,m3->m2 } title = title.tr(':/ ','___') modified = docxcore.toString().replaceAll(/(.*\}modified\[attributes\=\{\{http.*W3CDTF\}; .*value\=\[)(20[^\]]*)(Z\]\]\].*)/) {m0,m1,m2,m3->m2 } modified = modified.replaceAll(/(.*)(T..:..:..)/) {m0,m1,m2 -> m1} modified = modified.replaceAll(/(\d+)\-(\d+)\-(\d+)/) {m0,m1,m2,m3 -> m1+m2+m3 } targetName= file.name.replaceAll('\\.docx','') +'-'+ title +'-'+modified +'.docx' println file.name + " renamed to " + targetName file.renameTo(new File((targetName ))) } }