Что не так с рекурсией в этом VBScript?

#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, и тестовые файлы были удалены.

Итак, поскольку мы не знаем, с какой реальной проблемой у вас это связано, это примерно все, что я могу предложить прямо сейчас.