#recursion #vbscript
#рекурсия #vbscript
Вопрос:
Пытаюсь рекурсивно удалить .exe файлы установленного размера — но VBScript не моя сильная сторона, Может кто-нибудь увидеть очевидную причину, по которой он не работает рекурсивно?
OPTION EXPLICIT
DIM strFolder
DIM objFSO
strFolder = "C:TESTFOLDER"
set objFSO = createobject("Scripting.FileSystemObject")
RecursiveDelete strFolder
wscript.echo "Finished"
sub RecursiveDelete(byval strDirectory)
DIM objFolder, objSubFolder, objFile
set objFolder = objFSO.GetFolder(strDirectory)
for each objFile in objFolder.Files
if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (file.Size == 47232 ) then
wscript.echo "Deleting:" amp; objFile.Path
objFile.Delete
end if
next
for each objSubFolder in objFolder.SubFolders
RecursiveDelete objSubFolder.Path
next
end sub
Комментарии:
1. В следующий раз, пожалуйста, постарайтесь более конкретно описать ошибку, т. Е. немного более описательно, чем «не работает».
2. Прошу прощения. Это работало, просто не повторялось — т. е. «не работало рекурсивно»
Ответ №1:
Это:
if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (file.Size == 47232 ) then
должно быть:
if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (objFile.Size = 47232 ) then
Ответ №2:
Что он делает или не делает, что говорит вам о том, что он не работает?
Один совет: закомментируйте на данный момент оператор if и просто попросите его распечатать каждую посещенную папку и файл, чтобы убедиться, что рекурсия происходит. Затем повторно запустите оператор if, но закомментируйте оператор delete и попросите его напечатать соответствующие имена файлов.
Другими словами, убедитесь, что он делает то, что вы думаете, что он делает.
Что-то еще, что я вижу, как только что упомянул Эккехард, VBScript не использует двойной знак равенства для проверки равенства.
После некоторого тестирования:
Вы перепечатали это здесь? Потому что этот код даже не выполняется как заданный.
В дополнение к двойному знаку равенства, который вызывает синтаксическую ошибку компиляции VBScript, вы также ссылаетесь на «file» в этом операторе, но такая переменная нигде не объявлена.
Я изменил его на objFile, закомментировал оператор delete и удалил второй знак равенства, и этот код действительно выполняется и повторяется, как вы и ожидали.
Я также создал несколько тестовых файлов в папке и повторно включил инструкцию delete, и тестовые файлы были удалены.
Итак, поскольку мы не знаем, с какой реальной проблемой у вас это связано, это примерно все, что я могу предложить прямо сейчас.