循环遍历所有子目录并不是所有子目录

时间:2015-08-27 03:39:11

标签: vbscript

我有一个脚本应该遍历一组目录并删除任何超过给定天数的文件。然后,如果目录为空,则应将其删除。有数十万个子目录,每个子目录包含1-3个子目录,每个子目录包含0-N个文件。

文件删除工作正常,但有两个问题:

(1)没有目录被删除

(2)由于某种原因,该脚本会跳过大量目录(例如:“E:\ data”包含900,000个以数字命名的目录,其数字从700开始,一直到1000000.每个目录都包含几个目录。脚本将处理目录300000到1000000并跳过编号小于300000的脚本。)

好像它可能正在跳过空目录,但我不知道为什么,而且我不知道它为什么不删除空目录。

以下是代码:

Dim strDir, strDays
Dim objFolder, objSubFolder, objFile, objOtherFolder

Set objFSO = CreateObject("Scripting.FileSystemObject")

strDir = "E:\Data"
strDays = 90
Set objFolder = objFSO.getFolder(strDir)
Call CleanupFiles(strDir, strDays)  

WScript.Echo "DONE!"

Sub CleanupFiles(inDirectory, inOlderThanDays)
    WScript.Echo "DOING: " & inDirectory & vbCr
    Set objFolder = objFSO.getFolder(inDirectory)
    For Each objFile In objFolder.files
        If dateDiff("d",objFile.dateLastModified,Now) > inOlderThanDays Then 
            wscript.echo "DEL " & objFile.name & " " & objFile.dateLastModified & vbCr
            objFile.Delete
        End If
    Next
    If objFSO.FileExists(inDirectory & "\thumbs.db") Then 
        objFSO.DeleteFile(inDirectory & "\thumbs.db")
        If Err Then 
            WScript.Echo "Error deleting:" & inDirectory & "\thumbs.db" & " - " & Err.Description
            Err.Clear
        End If
    End If
    For Each objSubFolder In objFolder.SubFolders
        Call CleanupFiles(objSubFolder.Path, inOlderThanDays)
    Next
    For Each objSubFolder In objFolder.SubFolders
        If objSubFolder.Files.Count = 0 And objSubFolder.SubFolders.Count = 0 Then
            wscript.echo "DEL DIRECTORY!! " & ObjSubFolder.Path & vbCr
            ObjSubFolder.Delete
        End If
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

FSO对象应该在子例程的范围内声明。如上所述,递归早期结束,因为objFSO,objFolder和objSubfolder被覆盖,因此无法完成for / each循环。

通过在子程序中声明(DIM)变量来解决这个问题。