首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名Word文档并保存其文件名及其前10个字母

重命名Word文档并保存其文件名及其前10个字母
EN

Stack Overflow用户
提问于 2010-07-28 19:59:14
回答 2查看 1K关注 0票数 4

我使用一款名为photorec的软件从损坏的硬盘中恢复了一些Word文档。问题是文档的名称无法恢复;它们都是由一系列数字重命名的。有2000多个文档要排序,我想知道是否可以使用一些自动化过程来重命名它们。

有没有一个脚本可以用来找到文档中的前10个字母,并将其重命名?它必须能够处理具有相同前10个字母的多个文档,因此不能覆盖具有相同名称的文档。此外,它还必须避免使用非法字符(如'?‘、'*’、'/‘等)重命名文档。

我对Python、C只有一点经验,对Linux中的bash编程更是一无所知,所以如果我需要编写一个新脚本,不知道自己在做什么,请耐心等待。

EN

回答 2

Stack Overflow用户

发布于 2010-07-28 20:57:55

那VBScript呢?这是一个草图:

FolderName = "C:\Docs\“

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2010-07-28 20:41:20

Word文档以自定义格式存储,这在文件的开头添加了大量的二进制代码。

最简单的事情是在Python中查找以ASCII字符开头的第一行。这就是了:

代码语言:javascript
复制
#!/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字符的第一块(如果您查找的字符少于100个,则最终会选择doc关键字之类的字符),然后使用其中的前20个字符组成新名称,用下划线替换任何不是a-z A-Z或0-9的字符,以避免文件名问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3352572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档