删除超过特定年龄的文件夹

时间:2013-02-25 16:56:23

标签: vbscript

这是我的功能不起作用。它永远不会进入删除调用,因为if语句永远不会计算为true,我无法弄清楚原因。

Function DeleteOldFolders(root, maxAgeInDays)

    Dim fso, ofolder, subFolders
    Set fso = CreateObject ("Scripting.FileSystemObject")

    If fso.FolderExists(root) Then

        Set ofolder = fso.GetFolder(root)
        Set subFolders = ofolder.SubFolders

        For Each folder in subFolders
            createdDate = FormatDateTime(folder.DateCreated, "2")

            If (DateDiff("d", createdDate, Date) > maxAgeInDays) Then

                objFSO.DeleteFolder folder, True

            End If
        Next

    End If

    Set objFSO = Nothing

End Function

2 个答案:

答案 0 :(得分:2)

可能是您定义fso

的原因
Set fso = CreateObject ("Scripting.FileSystemObject")

然后使用objFSO

objFSO.DeleteFolder folder, True

并在您的脚本中的其他地方设置On Error Resume Next(除非您知道完全您正在做什么和<,否则永远使用它/ strong>有合理的错误处理代码。

一些附注(与实际问题无关,但值得考虑):

  • 始终使用Option Explicit。没有例外。
  • 您可以直接在folder.DateCreated中使用DateDiff()。无需格式化值。
  • 您的功能不会返回任何内容,因此您最好将其作为一个程序。

您的程序的简化版本可能如下所示。

Sub DeleteOldFolders(root, maxAgeInDays)
  Dim fso, folder

  Set fso = CreateObject("Scripting.FileSystemObject")

  If fso.FolderExists(root) Then
    For Each folder in fso.GetFolder(root).SubFolders
      If DateDiff("d", folder.DateCreated, Date) > maxAgeInDays Then
        folder.Delete True
      End If
    Next
  End If

  Set fso = Nothing
End Sub

答案 1 :(得分:0)

您的陈述

createdDate = FormatDateTime(folder.DateCreated, "2")

是错误的,有风险的,没有必要的。第二个参数 -

  

NamedFormat可选。表示日期/时间的数字值   使用的格式。如果省略,则使用vbGeneralDate。

数字,应该通过预定义的常量vbGeneralDate,...来提供。

结果字符串是否正确转换为DateDiff()所需的日期是一个悬而未决的问题。所以使用一致类型的

If (DateDiff("d", folder.DateCreated, Date) > maxAgeInDays) Then

问题的另一个可能原因是DateDiff()'语义:

  

如果date1指的是比date2更晚的时间点,则DateDiff   函数返回负数。

你以maxAgeInDays传递了什么?