Batch DOCX Renamer


0

เรื่องสั้นสั้นฉันกู้คืนข้อมูลจำนวนมากที่ถูกลบออกจากฮาร์ดไดรฟ์เพื่อน ฉันสามารถจัดระเบียบ MP3 และ JPEG ได้อย่างไม่มีปัญหา แต่ฉันไม่สามารถหาโปรแกรมที่จะใช้ข้อมูล Meta ของไฟล์ DOCX เพื่อเปลี่ยนชื่อ ฉันแค่ต้องการใช้ชื่อเอกสารเป็นชื่อไฟล์

ใครรู้โปรแกรมที่สามารถทำเช่นนี้?

ขอบคุณ


ฉันพบสคริปต์ Perl ที่ฉันสามารถแก้ไขได้ แต่นี่เป็นตัวเลือกสุดท้ายของฉัน มีใครบางคนเขียนโปรแกรมเพื่อทำสิ่งนี้? สคริปต์ Perl
amof

คำตอบ:


1

จริง ๆ แล้ว docx เป็นไฟล์ซิปที่มีหลายสิ่งใน XML อยู่ภายใน ชื่อเป็นภายในdc:titledocProps/core.xml

แก้ไข: เขียนสคริปต์หลามอย่างรวดเร็วเพื่อทำ

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

มันจะประมวลผลทุกสิ่งที่กำหนดให้เป็นอาร์กิวเมนต์บรรทัดคำสั่ง หากไฟล์ไม่มีชื่อไฟล์มันจะบอกคุณและข้ามมันไป นอกเหนือจากนั้นไม่มีการจัดการข้อผิดพลาด ทุกสิ่งที่ใช้ควรอยู่ในไลบรารีมาตรฐาน


อาจเป็นประโยชน์ แต่ก็ไม่สามารถตอบคำถามได้
มาร์คัสชาน

เพิ่มรหัสบางอย่าง
qmega

0

สคริปต์ Windows ต่อไปนี้สาธิตวิธีรับชื่อเอกสาร คุณจะต้องการสร้างไฟล์ที่ลงท้ายด้วย ".wsf" แล้ววางลงในไฟล์ คุณจะวนซ้ำไฟล์ของคุณและเปลี่ยนชื่อเมื่อคุณไป นั่นเป็นส่วนที่ง่าย นี่คือส่วน "ยาก" และแสดงเฉพาะวิธีการได้รับชื่อ

ฉันตั้ง 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.