我正在尝试编写一个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的子文件夹中的所有文件 - 然后将找到的这些文件复制到新文件夹中。 提前谢谢。
答案 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