递归文件重命名
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
出于法律原因,我的公司正试图从我们的整个文件系统中清除特定的首字母缩略词。搜索 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