я написал следующую подпрограмму:Чтобы влезть в подпапки внутри папки в vbscript?
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
Кроме того, существует ли эквивалент return()
заявления в VBScript? Первоначально я думал, что проблема заключается в том, что элемент управления не возвращался обратно в вызывающий оператор после выполнения подпрограммы Delfldr
. Поэтому я заменил его на функцию и вернул значение bool в IsDone
, думая, что оно вернет управление в подпрограмму Openf
. Однако это не сработало.
Отклоните свой код; это так нечитаемо – Bathsheba
Пожалуйста, воздержитесь от того, чтобы ваш вопрос был менее читаемым, чем раньше. По крайней мере, если вы ожидаете, что кто-то ответит. –