次のサブルーチンを作成しました。
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
サブルーチンを呼び出す必要があります。もう 1 つの条件は、フォルダー内のサブフォルダーをmm
(関数を使用して) 直接削除する必要がDelfldr
あることです。ただし、ファイルが見つかるレベルには移動しません。
問題は、フォルダー内のmm
フォルダーのみが削除されることです。スクリプトは、フォルダーと同じレベルにある他のサブフォルダーを通過していないようですmm
。つまり、tar.gz
拡張子を持つファイルは削除されません。
階層は次のとおりです。
C:\backups → c6,mm → es → at01 → files with tar.gz extension
また、return()
VBScript のステートメントに相当するものはありますか? Delfldr
最初は、サブルーチンが実行された後に制御が呼び出し元のステートメントに戻されなかったために問題が発生したと考えていました。そこで私はそれを関数に変更し、bool 値を に戻し、サブルーチンIsDone
に制御を戻すと考えました。Openf
しかし、これはうまくいきませんでした。