VB脚本文件集合

时间:2011-05-03 17:59:06

标签: vbscript

我正在研究一些逻辑,如果磁盘空间达到定义的最大容量,将从特定文件夹中删除文件,我有以下代码:

    'Remove files if disk space falls below 100GB
        While hDisk.FreeSpace < 100000000000
            Set Directory = Fso.GetFolder("C:\backups")
            Set Files = Directory.Files
            Dim file1
            Dim file2
            For n = Files.Count - 1 to 0 Step - 1
            If IsEmpty(file1) or IsNull(file1) Then
ERROR Here -->Set file1 = Files.Item(n)
            ElseIf n > 0 Then
                Set file2 = Files.Item(n)
                If hDisk.FreeSpace > 100000000000 Then 
                    Exit For
                ElseIf file2.DateLastModified < file1.DateLastModified And DateDiff("D", file2.DateLastModified, Now) > 7 Then 
                    file2.Delete
                ElseIf file1.DateLastModified < file2.DateLastModified And DateDiff("D", file1.DateLastModified, Now) > 7 Then 
                    file1.Delete
                    Set file1 = Files.Item(n)
                Else
                    'Nothing
                End If
            Else
                'Nothing
            End If
           Next
        Wend 'End loop when drive is below max capacity

它应该做的是遍历文件夹中的文件集合并删除最旧的文件,直到磁盘空间超过容量。因此必须进行一些文件比较。我在上面的行遇到无效的过程调用或参数错误(请参阅注释)。我也想知道这是否是最好的方法,我愿意接受更好的建议,最好是那些会减少代码的建议。

更新:

尝试在赋值语句前添加Set,但仍然得到相同的错误。

更新2(工作脚本!!):

使用它更多,并且能够使脚本正常工作,这里完全是为了其他人想要使用它。我添加了注释来指示自定义值,可以安全地假设任何其他类似的值也可以自定义,即磁盘大小在多个位置定义。

Dim Fso
Dim hDisk
Dim Directory
Dim Files
Dim myArray()

Set Fso = CreateObject("Scripting.FileSystemObject")
Set hDisk = Fso.GetDrive("c:") 'Custom Value - drive to monitor

If hDisk.FreeSpace < 100000000000 Then
    'Delete files until free space is below max capacity (defined here as 100GB)
    While hDisk.FreeSpace < 100000000000 'Custom Value - disk size in bytes
        Set Directory = Fso.GetFolder("C:\backups") 'Custom Value - Directory to monitor
        Set Files = Directory.Files
        Redim myArray(Files.Count)
        i=0
        For Each fl in Files
          Set myArray(i)=fl
          i=i+1
        Next

        Dim file1
        Dim file2
        For n = Files.Count - 1 to 0 Step - 1
            '1st PASS: Instantiate first file
            If IsEmpty(file1) or IsNull(file1) Then
                Set file1 = myArray(n)
            'Compare 1st file with next file and current date, remove oldest if it's older than a week
            ElseIf n > 0 Then
                Set file2 = myArray(n)
                If hDisk.FreeSpace > 100000000000 Then 
                    Exit For
                ElseIf file2.DateLastModified < file1.DateLastModified And DateDiff("D", file2.DateLastModified, Now) > 7 Then 'Custom Value - File age in number of days
                    file2.Delete
                ElseIf file1.DateLastModified < file2.DateLastModified And DateDiff("D", file1.DateLastModified, Now) > 7 Then 
                    file1.Delete
                    Set file1 = myArray(n)
                Else
                    'Nothing
                End If
            'Remove remaining file if it's older than a week
            Else
                Set file1 = myArray(n)
                If DateDiff("D", file1.DateLastModified, Now) > 7 Then
                file1.Delete
                End If
            End If
        Next
    Wend 'End loop when drive is below max capacity
End If

更新3:

为了澄清正在做什么,伪代码如下:

If disk space is maxed
    While disks space is maxed
    For each file
     If 1st File is empty
      Get 1st File
      If disk space is below max
         Exit
      Else Get Next File
         If Next File is older than 1st File and older than a week
         Delete Next File
         Continue
      Else if 1st File is older  and older than a week
         Delete current 1st File
         Set 1st File to Next File
         Continue
      Else if 1st file is the only file and is older than a week
         Delete 1st File

1 个答案:

答案 0 :(得分:1)

重新发明轮子。您正在尝试创建一个脚本来执行Windows中已存在的任务。