Переименование документа Word и сохранение его имени файла с его первыми 10 буквами - PullRequest
4 голосов
/ 28 июля 2010

Я восстановил некоторые документы Word с поврежденного жесткого диска с помощью программы под названием photorec.Проблема в том, что имена документов не могут быть восстановлены;все они переименованы в последовательности чисел.Есть более 2000 документов для сортировки, и мне было интересно, смогу ли я переименовать их, используя какой-то автоматизированный процесс.

Есть ли скрипт, который я мог бы использовать, чтобы найти первые 10 букв в документе и переименовать его с этим?Он должен быть в состоянии справиться с несколькими документами, имеющими одинаковые первые 10 букв, и, следовательно, не записывать поверх документов с одинаковыми именами.Кроме того, следует избегать переименования документа с недопустимыми символами (такими как «?», «*», «/» И т. Д.)

У меня есть только небольшой опыт работы с Python, C,и даже меньше с программированием на bash в Linux, так что терпите меня, если я точно не знаю, что я делаю, если мне нужно написать новый скрипт.

Ответы [ 2 ]

3 голосов
/ 28 июля 2010

Как насчет VBScript?Вот эскиз:

FolderName = "C: \ Docs \"

Set fs = CreateObject("Scripting.FileSystemObject")

Set fldr = fs.GetFolder(Foldername)

Set ws = CreateObject("Word.Application")

For Each f In fldr.Files
    If Left(f.name,2)<>"~$" Then
        If InStr(f.Type, "Microsoft Word") Then

        MsgBox f.Name

        Set doc = ws.Documents.Open(Foldername & f.Name)
        s = vbNullString
        i = 1
        Do While Trim(s) = vbNullString And i <= doc.Paragraphs.Count
            s = doc.Paragraphs(i)
            s = CleanString(Left(s, 10))
            i = i + 1
        Loop

        doc.Close False

        If s = "" Then s = "NoParas"
        s1 = s
        i = 1
        Do While fs.FileExists(s1)
            s1 = s & i
            i = i + 1
        Loop

        MsgBox "Name " & Foldername & f.Name & " As " & Foldername & s1 _
            & Right(f.Name, InStrRev(f.Name, "."))
        '' This uses copy, because it seems safer

            f.Copy Foldername & s1 & Right(f.Name, InStrRev(f.Name, ".")), False

            '' MoveFile will copy the file:
        '' fs.MoveFile Foldername & f.Name, Foldername & s1 _
        ''  & Right(f.Name, InStrRev(f.Name, "."))

        End If
    End If
Next

msgbox "Done"
ws.Quit
Set ws = Nothing
Set fs = Nothing

Function CleanString(StringToClean)
''http://msdn.microsoft.com/en-us/library/ms974570.aspx
Dim objRegEx 
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True

''Find anything not a-z, 0-9
objRegEx.Pattern = "[^a-z0-9]"

CleanString = objRegEx.Replace(StringToClean, "")
End Function
2 голосов
/ 28 июля 2010

Документы Word хранятся в произвольном формате, который помещает загрузку двоичного кода в начало файла.

Самым простым было бы что-то сбить в Python, который искал первую строку, начинающуюся с символов ASCII. Вот, пожалуйста:

#!/usr/bin/python

import glob
import os

for file in glob.glob("*.doc"):
    f = open(file, "rb")
    new_name = ""
    chars = 0

    char = f.read(1)
    while char != "":
        if 0 < ord(char) < 128:
            if ord("a") <= ord(char) <= ord("z") or ord("A") <= ord(char) <= ord("Z") or ord("0") <= ord(char) <= ord("9"):
                new_name += char
            else:
                new_name += "_"
            chars += 1
            if chars == 100:
                new_name = new_name[:20] + ".doc"
                print "renaming " + file + " to " + new_name
                f.close()
                break;
        else:
            new_name = ""
            chars = 0
        char = f.read(1)

    if new_name != "":
        os.rename(file, new_name)

ПРИМЕЧАНИЕ: если вы хотите перетаскивать несколько каталогов, вам необходимо соответствующим образом изменить строку перетаскивания. Также это не учитывает, существует ли уже файл, который вы пытаетесь переименовать, поэтому, если у вас есть несколько документов с одними и теми же первыми несколькими символами, вам придется с этим справиться.

Я нашел первый кусок из 100 символов ASCII подряд (если вы ищете меньше, чем в итоге, вы выбираете ключевые слова и т. Д.), А затем использовал первые 20 из них, чтобы создать новое имя, заменяя все, что чтобы избежать проблем с именами файлов, не az AZ или 0-9 с подчеркиванием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...