首页 > 解决方案 > VBA重命名文件夹中的文件保持正确的顺序

问题描述

我发现此代码将所有文件重命名为特定文件夹。

Const FolderLoc = "C:\Users\chf000\Desktop\AAA\"
Dim x As Long
x = 1
Dim s As String
s = Dir(FolderLoc & "*.*")
Do While s <> ""
       Name FolderLoc & s As FolderLoc & "ANIMATIC-" & x & ".png"
    s = Dir()
    x = x + 1
Loop

它有效,但我在重命名期间遇到了问题。基本上,我在文件夹中有一个 png 的序列,如下所示:SHOT001_00.png 和 SHOT001_01.png 等等。该序列有超过 100 帧。该脚本将名称从 SHOT001_00.png 更改为 ANIMATIC-0.png 等等。当我运行脚本时,文件以错误的顺序重命名。例如,名为 ANIMATIC-12.png 的文件包含属于第 101 帧的图像。我猜是脚本如何对文件夹中的文件进行排序的问题,是按字母顺序排序,而不是数字顺序。有谁知道如何编辑脚本以重命名并保持正确的顺序?谢谢

标签: excelvbasortingsequencerename

解决方案


我认为您应该首先将所有名称放入一个数组中,然后从该列表中重命名它们。
我使用此代码将文件列表放入数组中:

Private Function GetFileList(FileSpec As String) As Variant
'   Returns an array of filenames that match FileSpec
'   If no matching files are found, it returns False

    Dim FileArray() As Variant
    Dim FileCount As Integer
    Dim FileName As String

    On Error GoTo NoFilesFound

    FileCount = 0
    FileName = Dir(FileSpec)
    If FileName = "" Then GoTo NoFilesFound

    'Loop until no more matching files are found
    Do While FileName <> ""
        FileCount = FileCount + 1
        ReDim Preserve FileArray(1 To FileCount)
        FileArray(FileCount) = FileName
        FileName = Dir()
    Loop
    GetFileList = FileArray
    Exit Function

    '   Error handler
NoFilesFound:
    GetFileList = False
End Function

推荐阅读