递归文件重命名

Recursive file renaming

出于法律原因,我的公司正试图从我们的整个文件系统中清除特定的首字母缩略词。搜索 returns 近 30,000 个上述首字母缩略词的实例。我使用建议 here 编写了以下 VBS 以尝试使过程递归。不幸的是,我未能正确实施它。

我在第 3 行收到 "Invalid procedure call or argument" 错误。 如果我编辑它以引用根文件夹,我会在第 18 行得到一个 Object required: 'File' 错误。

Set objFso = CreateObject("Scripting.FileSystemObject")
Set Folder = objFSO.GetFolder("<folderpath>")

TraverseFolders objFso.GetFolder(strPath)

Function TraverseFolders(fldr)
    For Each File In Folder.SubFolders
        sNewFile = File.Name
        sNewFile = Replace(sNewFile, "old acronym", "new acronym")
        If (sNewFile <> File.Name) Then
            File.Move(File.ParentFolder + "\" + sNewFile)
        End If
    Next

    For Each sf In fldr.SubFolders
        TraverseFolders sf
    Next
    sNewFile = File.Name
    sNewFile = Replace(sNewFile, "old acronym", "new acronym")
    If (sNewFile <> File.Name) Then
        File.Move(File.ParentFolder + "\" + sNewFile)
    End If
End Function

递归地完成这项工作我错过了什么?

对于那些在这里绊倒的人来说,问题在于定义 strPath 并引用文件夹而不是 fldr。 这是正确的代码:

Set objFso = CreateObject("Scripting.FileSystemObject")
Set strPath = objFSO.GetFolder("<folder path>")
'setting the strPath instead of the unused Folder'
TraverseFolders objFso.GetFolder(strPath)

Function TraverseFolders(fldr)

  For Each File In fldr.Files
  'Referencing fldr instead of the unused Folder'
    sNewFile = File.Name
    sNewFile = Replace(sNewFile,"old acronym","new acronym")
    if (sNewFile<>File.Name) then 
        File.Move(File.ParentFolder+"\"+sNewFile)
    end if

Next

  For Each sf In fldr.SubFolders
    TraverseFolders sf  
    'Removed unnecessary code duplicate'
    Next
End Function