2013-08-06 59 views
0

我對VBScript非常新,我正在嘗試編寫一個簡單的腳本,將一個目錄中的文件提取到一個新的目錄。到目前爲止,這是我有什麼(和它運作良好):搜索C驅動器的VBScript文件

'USER VAR REPRESENTS WINDOWS USERNAME 
Set oShell = CreateObject("WScript.Shell") 
user=oShell.ExpandEnvironmentStrings("%UserName%") 

'FOLDER TO BE EXTRACTED 
ZipFile="C:\Users\"&user&"\Downloads\Test.zip" 

'LOCATION TO EXTRACT FILES 
ExtractTo="C:\Users\"&user&"\desktop" 

'EXTRACT ZIP FILE 
Set objShell = CreateObject("Shell.Application") 
Set FilesInZip=objShell.NameSpace(ZipFile).items 
objShell.NameSpace(ExtractTo).CopyHere(FilesInZip) 

Set fso = Nothing 
Set objShell = Nothing 
Set oShell = Nothing 

現在,如果可能的話,如果「桌面」文件夾中無法找到,或「Test.zip」文件無法找到,我會喜歡爲他們搜索C驅動器,然後繼續解壓縮等。我看過一些例子,但我無法理解如何複製它們。如何搜索整個C盤和子文件夾中的這些文件?

幫助將不勝感激,在此先感謝!

回答

1

一般遞歸搜索可以做這樣的:

Function SearchFolder(fldr, name) 
    Set SearchFolder = Nothing 
    For Each f In fldr.Files 
    If LCase(f.Name) = LCase(name) Then 
     Set SearchFolder = f 
     Exit Function 
    End If 
    Next 

    For Each sf In fldr.SubFolders 
    Set result = SearchFolder(sf, name) 
    If Not result Is Nothing Then 
     Set SearchFolder = result 
     Exit Function 
    End If 
    Next 
End Function 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set f = SearchFolder(fso.GetFolder("C:\"), "Test.zip") 

然而,搜索整個驅動​​器的方式將需要相當一段時間。此外還有幾個用戶無法訪問的文件夾,因此如果您想要執行這樣的搜索,則必須對此進行說明。

+0

好的,這是真的,謝謝。基本上,(這不包括在我的代碼中)我想找到一個itunes子文件夾,它將位於不同計算機上的不同位置。關於如何在不通過整個C盤的情況下做到這一點的任何想法?例如,在我的電腦上,您必須轉到音樂> iTunes>(子文件夾)。在其他計算機上,它可能在文檔或其他地方(我不是用程序文件談論iTunes文件夾,這是另一種) – kshah

+0

你的意思是圖書館,我知道。 'My Music'用戶shell文件夾是它的默認位置,可以從註冊表中讀取('HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders \ My Music')。我沒有在Windows上使用iTunes,所以我不知道你是否可以在沒有改變價值的情況下選擇不同的位置,以及不同位置的存儲位置。 –