2014-09-04 61 views
0

我需要遞歸地通過C:\ Users目錄樹遞歸搜索多個文件。VBS在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 

如果我運行它作爲「管理員」,我得到:

VBScript runtime error: Permission Denied 

如果我運行它作爲「本地系統」的用戶,我得到:

VBScript runtime error: Path not found 

如果我在開頭添加'On Error Resume Next'來抑制錯誤,我什麼都沒有回來。

我已經在C:\ Users子目錄的許多位置放置了一個名爲'whoa.txt'的文本文件。

我懷疑它是Windows權限的東西,但我不確定。

非常感謝。

+1

爲什麼不發佈錯誤發生的行號? 'C:\ Users'中的用戶配置文件文件夾是安全的。你爲什麼只調暗你的一些變量?您正在使用'LCase()'將文件名轉換爲小寫,但許多您搜索的文件不是小寫字母('myFile1.pdf','myFile2.pdf'等)。爲什麼要將一組子文件夾分配給一個名爲'files'的變量? (其中一些批評並不會真正影響你的劇本,但是它們讓閱讀變得更加困難)。 – Bond 2014-09-04 12:45:14

回答

2

首先,我沒有使用你的代碼,它讓我感到困惑,你試圖完成什麼。

接下來,您應該運行管理員模式命令提示符下的腳本。這應該允許您檢查文件是否在那裏。
cmd

然後粘貼下面的代碼到VBS文件和CSCRIPT它。該代碼顯示所有匹配的文件名。
我的想法是,而不是通過任何文件夾中的所有文件匹配的文件名,檢查是否有那些想要的文件存在於該文件夾 - 這通常更快,因爲一些文件夾包含數百個文件,如果不是數千(檢查您的Temp文件夾!) 。

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