我编写了以下子程序:
Sub Openf(fldr,fso,ByRef newf)
Dim subf,fpath,ext,fname,IsDone
Set subf=fldr.SubFolders
If(Not subf Is Nothing) Then
For Each sf in subf
fpath=fso.GetAbsolutePathName(sf.Path)
fname=fso.GetBaseName(fpath)
If(StrComp(fname,"mm")=0) Then
IsDone=Delfldr(sf.SubFolders,fso,newf)
End If
Openf sf,fso,newf
Next
Else
Set subf=fldr.Files
For Each sf in subf
fpath=fso.GetAbsolutePathName(sf.Path)
ext=CStr(fso.GetExtensionName(fpath))
If(StrComp(ext,"tar.gz")=0) Then
Delfile subf,fso,newf
End If
Next
End If
End Sub
它应该递归地遍历给定文件夹中的所有子文件夹,并在找不到更多子文件夹时停止。在那个级别,它必须获取将出现的文件集合(带有扩展名tar.gz
),然后调用Delfile
子例程。另一个条件是文件夹中的子mm
文件夹必须直接删除(使用Delfldr
函数),而不是进入到可以找到文件的级别。
问题是只有文件夹中的mm
文件夹被删除。该脚本似乎没有通过与该文件夹处于同一级别的其他子mm
文件夹。换句话说,带有tar.gz
扩展名的文件不会被删除。
层次结构如下:
C:\backups → c6,mm → es → at01 → files with tar.gz extension
另外,在 VBScript 中是否有等效的return()
语句?我最初认为问题是因为在执行子例程后控件没有返回到调用语句Delfldr
。所以我把它改成了一个函数并返回了一个 bool 值IsDone
,认为它将控制权返回给Openf
子程序。然而这并没有奏效。