之前接了一个需求,需要将查询一个大文件夹下所有的脚本中是否包含某一个字符串,大文件夹下的第二层为众多小文件夹,每一个小文件夹下又还有文件夹,所要的脚本位于文件夹的最底层。
接到这个需求的时候我就考虑我要满足的两个部分,一个是查询脚本(最终目的),另一个是找到脚本(必然过程)。
由于之后的需求又升级为找脚本方面需要具有适用性,即脚本位于的文件夹的层级不确定,也就是说脚本的位置不确定,经过网上资料的查询即自我的构思,最后写下这篇遍历文件夹下所有的你需要的文件,闲话少说,进入正题。
先设置一个场景:现在有一个文件夹test,其下有两个子文件夹A,B,A中有一些TXT文本,B中有我们所需要的一个pl脚本,现在我们来开始进行查询取得pl脚本中的内容。
Sub findfileway()
dim fso,folder,fds,fd '设置变量
Dim beginfile '设置最外层文件夹路径
Dim folderway '当前路径
Dim filename '设置文件夹/文件名称
Dim myfile '定位文件
set fso=createobject("scripting.filesystemobject")
'建立文件系统对象变量
set folder=fso.getfolder(beginfile)
'获得文件夹
set fds=folder.subfolders '路径下的子文件夹集合
For each fd in fds
filename=fd.name '将名字赋予filename
folderway=(beginfile+"\"+filename)
myfile=dir(folderway+"\*.pl") '定位查询文件夹A下是否含有pl脚本,为空则没有
if myfile <>"" then
Else
End if
Next '进行循环test下一个文件夹B
End sub
至此我们可以完成第二级文件夹的循环遍历,并在其下中查询出需要的pl脚本,但pl脚本并不是只位于第二级文件夹或者是位于更多级之后的文件夹中,这样我们就需要循环调用这个方法来完成我们的需求。接下来进行之后的代码编写,位于end if之后next之前。
'继续遍历子文件夹
folderway=(folderway+"\"+filename)
dim folder5,fds2,fd2
set folder5= fso.getfolder(beginfile)
set fds2=folder5.subfolders
For each fd2 in fds2 '循环遍历下一级文件夹
myfile=dir(folderway+"\*.pl)
If (myfile<>"" and filename <>"")or (fd2<>"")then
call findfileway()
else
End if
Next
这部分代码都位于findfileway中,多次调用自己本身即可达到循环遍历多级文件夹的效果直到找到自己需要的文件。这段代码中最重要的是那个判断,判断是否还有下一级子文件夹,如果有就进行遍历。
以上就是全部的思路及代码,如有问题欢迎提问我会尽量解答。