2

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

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

以下是我尝试过的:

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

'文件夹名 = "\file001\source$" '文件名 = "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

4 回答 4

3

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

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,则需要使用类似这样的内容递归到子文件夹。您可以将上述代码示例中的检查集成到子文件夹的循环中,或者在文件夹中的文件上添加另一个循环:

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
于 2013-04-17T21:56:00.210 回答
1

在这里查看我的问题,我对三种语言(也包括 vbscript)进行了基准测试,它们使用完整的工作示例进行子目录遍历并针对语言进行了优化。基准测试:python 是否有更快的遍历网络文件夹的方法?

于 2013-04-18T11:53:44.123 回答
0

这是一个很好的尝试。阅读以下链接的更多信息并更好地了解事情。

于 2013-04-17T12:34:00.753 回答
-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
于 2014-10-08T18:27:07.053 回答