VBS在C:\ Users中递归搜索多个文件

时间:2014-09-04 05:40:41

标签: windows search recursion vbscript

我需要递归地通过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权限的东西,但我不确定。

非常感谢。

1 个答案:

答案 0 :(得分:2)

首先我没有使用你的代码,它让我困惑你要完成的事情。

接下来,您应该在 Administrator 模式命令提示符下运行该脚本。这应该允许您检查文件是否存在。
cmd

然后将以下代码粘贴到 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