VB脚本 - 在目录中搜索文件

时间:2013-04-17 12:30:03

标签: vbscript system-administration

我正在尝试编写一个VB脚本(之前从未尝试过) - 我需要它来搜索文件夹'\ file001 \ source $' - 而在文件夹中搜索所有'Update.exe'文件 - 如果这是手动完成,在Windows中需要很长时间! 我希望它用这个名字找到的所有文件都被复制到一个新文件夹中。

看着各种帮助论坛,我越来越困惑。

以下是我的尝试:

Set fso = CreateObject("Scripting.FileSystemObject")
ShowSubfolders fso.GetFolder("\\file001\source$")

'foldername =“\ file001 \ source $”   'filename =“Updater.exe”

Function ShowSubFolders(Folder)
    For Each Subfolder in Folder.SubFolders
        Wscript.Echo Subfolder.Path
        ShowSubFolders Subfolder
    Next
End Function

这是通过文件夹子文件夹递归搜索文件夹,以查找具有此名称的所有文件。

我还研究过-directory.getfiles。但不知道这是否是正确的方向。

作为VB脚本的新手,我已经研究并尝试使用vb脚本,以获得我想要的功能。我很感激能得到的任何帮助。

再次 - 我的目标是 - 查找给定文件夹和名称为update.exe的子文件夹中的所有文件 - 然后将找到的这些文件复制到新文件夹中。 提前谢谢。

4 个答案:

答案 0 :(得分:1)

如果您只想检查单个文件夹的内容是否存在特定文件,您可以这样做:

Set fso = CreateObject("Scripting.FileSystemObject")

foldername = "\\file001\source$"
filename   = "Update.exe"

If fso.FileExists(fso.BuildPath(foldername, filename)) Then
  WScript.Echo filename & " exists."
End If

如果您还要检查foldername的子文件夹,则需要使用类似this的内容递归到子文件夹。您可以将上述代码示例中的检查集成到子文件夹中的循环中,或者在文件夹中的文件上添加另一个循环:

Set fso = CreateObject("Scripting.FileSystemObject")

CopyUpdater fso.GetFolder("\\file001\source$")

Sub CopyUpdater(fldr)
  For Each f In fldr.Files
    If LCase(f.Name) = "update.exe" Then
      'copy file to somewhere else
    End If
  Next

  For Each sf In fldr.SubFolders
    CopyUpdater sf
  Next
End Sub

答案 1 :(得分:1)

在这里查看我的问题,我对三种语言(也是vbscript)进行了基准测试,这些语言使用完整的工作样本进行子目录遍历并针对该语言进行了优化。 benchmarks: does python have a faster way of walking a network folder?

答案 2 :(得分:0)

这是一次很好的尝试。阅读以下链接,了解更多信息。

答案 3 :(得分:-1)

dim sFilename

Dim objDict
Set objDict=CreateObject("Scripting.Dictionary")
sFilename = ""

'root folder path where subfolder exists 
fileLocation="C:\Users\u258251\Desktop\TestSubfolder"

Dim objFSO 'File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Add all files with specific extention to dictonary 

Call Recurse(fileLocation)



ItemArray = objDict.Items


'Loop through dictonary
For i = 0 To objDict.count -1
    sFilename = sFilename & ItemArray(i) & VBCRLF
Next 

msgbox(sFilename)

'find a specific file by name and return path 
if objDict.Exists("DP103.txt") then 
    msgbox(objDict.Item("DP103.txt")) 
end if

Sub Recurse(strFolderPath)
    Dim objFolder
    Set objFolder = objFSO.GetFolder(strFolderPath)
    Dim objFile
    Dim objSubFolder

    For Each objFile In objFolder.Files
        If (InStr(objFile.Name, ".") > 0) Then

            'proceed if extention is .txt 
            If (LCase(Mid(objFile.Name, InStrRev(objFile.Name, "."))) = ".txt") Then 
                if objDict.Exists(objFile.Name)=false then 
                'add files and path to dictonary 
                objDict.Add objFile.Name,objfile.Path 
                End if 
            End if 
        End If 
    Next

    For Each objSubFolder In objFolder.SubFolders
        Call Recurse(objSubFolder.Path)
    Next
End Sub