Что не так с рекурсией в этом VBScript? - PullRequest
0 голосов
/ 26 мая 2011

Попытка рекурсивного удаления файлов .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:" & objFile.Path
                objFile.Delete
            end if
    next

    for each objSubFolder in objFolder.SubFolders
        RecursiveDelete objSubFolder.Path
    next
end sub

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Это:

if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (file.Size == 47232 ) then

должно быть:

if ( RIGHT(UCASE(objFile.Path),4) = ".EXE" ) AND (objFile.Size = 47232 ) then
0 голосов
/ 26 мая 2011

Что он делает или не делает, что говорит вам, что он не работает?

Один совет: закомментируйте оператор if на данный момент и просто распечатайте каждую папку и файл, которые вы посетили, чтобы убедиться, что рекурсия происходит.Затем включите оператор if, но закомментируйте оператор delete и заставьте его напечатать совпадающие имена файлов.

Другими словами, убедитесь, что он делает то, что, как вы думаете, он делает.

Что-то еще, что я вижуКак только что упомянул Эккехард, VBScript не использует двойной знак равенства для проверки равенства.

После некоторого тестирования:

Вы перепечатали это здесь?Поскольку этот код даже не выполняется как задано.

В дополнение к двойному знаку равенства, который вызывает синтаксическую ошибку компиляции VBScript, вы также ссылаетесь на «файл» в этом операторе, но такая переменная не объявленагде угодно.

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

Я также создал некоторый тестфайлы в папке и снова включили оператор удаления, и тестовые файлы были удалены.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...