我需要递归地通过C:\ Users目录树递归搜索多个文件。
如果我在任何子目录中找到任何指定文件,我想要回显完整路径。
这就是我所拥有的:
Dim fso,folder,files,sFolder,newFolder
Dim arr1
arr1 = Array("myFile1.pdf","myFile2.pdf","myFile3.pdf","nutbag.rtf","whoa.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
sFolder = "C:\Users"
Set folder = fso.GetFolder(sFolder)
Set files = folder.SubFolders
For each folderIdx In files
IF (Instr(folderIdx.Name,"Default") <> 1) Then
If (Instr(folderIdx.Name,"All Users") <> 1) Then
newFolder = sfolder & "\" & folderIdx.Name
CopyUpdater fso.GetFolder(newFolder)
End If
End If
Next
Sub CopyUpdater(fldr)
For Each f In fldr.Files
For Each i in arr1
If LCase(f.Name) = i Then
WScript.echo(f.name)
End If
Next
Next
For Each sf In fldr.SubFolders
CopyUpdater sf
Next
End Sub
如果我将其作为管理员&#39;运行,我会:
VBScript runtime error: Permission Denied
如果我将其作为&#39;本地系统&#39;用户,我明白了:
VBScript runtime error: Path not found
如果我添加,&#39; On Error Resume Next&#39;一开始就压制错误,我什么也得不回。
我已经放置了一个名为&#39; whoa.txt&#39;的文本文件。在C:\ Users子目录周围的许多地方。
我怀疑它是Windows权限的东西,但我不确定。
非常感谢。
答案 0 :(得分:2)
首先我没有使用你的代码,它让我困惑你要完成的事情。
接下来,您应该在 Administrator 模式命令提示符下运行该脚本。这应该允许您检查文件是否存在。
然后将以下代码粘贴到 vbs 文件和 cscript 文件中。此代码显示所有匹配的文件名。
我的想法是,不要遍历任何文件夹中的所有文件以查找匹配的文件名,而是检查该文件夹中是否存在这些所需文件 - 这通常更快,因为某些文件夹包含数百个文件夹文件,如果不是数千(检查你的临时文件夹!)。
Option Explicit
Const sRootFolder = "C:\Users"
Dim fso
Dim arr1
Dim oDict ' Key: Full filename, Item: Filename
Main
Sub Main
arr1 = Array("myFile1.pdf", "myFile2.pdf", "myFile3.pdf", "nutbag.rtf", "whoa.txt")
Set fso = CreateObject("Scripting.FileSystemObject")
Set oDict = CreateObject("Scripting.Dictionary")
' Call Recursive Sub
FindWantedFiles(sRootFolder)
' Display All Findings from Dictionary object
DisplayFindings
Set fso = Nothing
Set oDict = Nothing
End Sub
Sub FindWantedFiles(sFolder)
On Error Resume Next
Dim oFDR, oItem
' Check if wanted files are in this folder
For Each oItem In arr1
If fso.FileExists(sFolder & "\" & oItem) Then
oDict.Add sFolder & "\" & oItem, oItem
End If
Next
' Recurse into it's sub folders
For Each oFDR In fso.GetFolder(sFolder).SubFolders
FindWantedFiles oFDR.Path
Next
End Sub
Sub DisplayFindings()
Dim oKeys, oKey
oKeys = oDict.Keys
For Each oKey In oKeys
wscript.echo oKey
Next
End Sub