Рекурсивное переименование файлов - PullRequest
0 голосов
/ 14 марта 2019

По юридическим причинам моя компания пытается удалить определенную аббревиатуру из всей нашей файловой системы. Поиск возвращает почти 30 000 экземпляров указанной аббревиатуры. Я написал следующую VBS, используя предложения здесь , чтобы попытаться сделать процесс рекурсивным. К сожалению, я не смог правильно его реализовать.

В строке 3 появляется ошибка «Недопустимый вызов процедуры или аргумент». Если я отредактирую его для ссылки на корневую папку, вместо этого я получу требуемый объект: ошибка «Файл» в строке 18.

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

Чего мне не хватает, чтобы заставить это работать рекурсивно?

1 Ответ

0 голосов
/ 18 марта 2019

Для тех, кто споткнулся здесь, проблема заключалась в определении 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...