【问题标题】:What's wrong with the recursion in this VBScript?这个 VBScript 中的递归有什么问题?
【发布时间】:2011-05-26 15:59:49
【问题描述】:

尝试以递归方式删除设定大小的 .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

【问题讨论】:

  • 下次,请尝试更具体地说明错误,即比“不工作”更具描述性。
  • Apols。它正在工作,只是没有递归 - 即“没有递归工作”

标签: recursion vbscript


【解决方案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 语句,并让它打印匹配的文件名。

    换句话说,验证它正在做你认为它正在做的事情。

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

    经过一些测试:

    您是在这里重新输入的吗?因为这段代码甚至没有按照给定的方式运行。

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

    我将其更改为 objFile,注释掉 delete 语句,并删除第二个等号,这段代码确实可以按预期运行和递归。

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

    因此,由于我们不知道您在使用它时遇到了什么实际问题,所以我现在可以建议的就这么多。

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多