这个VBScript中的递归出了什么问题?

时间:2011-05-26 15:59:50

标签: recursion 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:" & objFile.Path
                objFile.Delete
            end if
    next

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

2 个答案:

答案 0 :(得分:2)

此:

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

应该是:

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

答案 1 :(得分:0)

它在做什么或不做什么告诉你它不起作用?

一个提示:暂时注释掉if语句,然后打印每个文件夹和访问过的文件,以确保递归发生。然后重新启用if语句,但注释掉delete语句,并让它打印匹配的文件名。

换句话说,确认它正在按照您的想法行事。

我看到的其他东西,正如Ekkehard刚刚提到的,VBScript不使用双等号来测试相等。

经过一些测试:

你在这里重新打字了吗?因为这段代码甚至没有按照给定的那样运行。

除了导致VBScript编译语法错误的双等号之外,您还在该语句中引用“file”,但在任何地方都没有声明此类变量。

我将其更改为objFile,注释掉了删除语句,并删除了第二个等号,此代码确实按照您的预期运行并递归。

我还在一个文件夹中创建了一些测试文件并重新启用了delete语句,并删除了测试文件。

因为我们不知道你遇到了什么实际的麻烦,这就像我现在所建议的那样多。