2013-08-06 58 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,所以我不知道你是否可以在没有改变价值的情况下选择不同的位置,以及不同位置的存储位置。 –