BAT或VBS清除旧文件&文件夹

时间:2014-12-04 14:12:42

标签: batch-file vbscript

我需要帮助调整以下代码或新代码,甚至定期清理特定目录。我尝试过在网上找到的一些解决方案,但似乎没有一个能正常工作。我基本上需要一个命令,根据修改日期删除超过X天的文件/文件夹。我发现的脚本似乎删除了太多。大多数似乎先删除文件然后删除任何空目录。这对我来说似乎不起作用。有没有办法查看文件夹的修改日期,如果它旧,删除文件夹和内容?计划是通过任务计划程序每周运行一次。

我会看看能否解释一下我的数据:

我的数据:

Mainfolder

Subfolder1

SubSubFolder1.1 - 包含旧文件的旧文件夹

SubSubFolder1.2 - 包含旧文件的旧文件夹

SubSubFolder1.3 - 包含新文件的新文件夹

Subfolder2

SubSubFolder2.1 - 包含旧文件的旧文件夹

Subfolder3

SubSubFolder3.1 - 包含新文件的新文件夹

脚本的结果应该如下所示,只剩下以下文件夹\文件:

Mainfolder

Subfolder1

SubSubFolder1.3 - 包含新文件的新文件夹

子文件夹2 - DELETED

Subfolder3

SubSubFolder3.1 - 包含新文件的新文件夹

以下是我在网上找到的代码,并且一直在尝试修改,但还没有让它正常工作。我试过调整它,但没有运气得到我想要实现的结果。它不断删除过多的数据,或者如果通过注释掉某些行进行调整,则不会删除足够的数据。

Const strPath = "C:\Temp"
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

Call Search (strPath)

' Comment out below line if you'd like to use this script in windows schedule task
WScript.Echo"Done."

Sub Search(str)
Dim objFolder, objSubFolder, objFile
Set objFolder = objFSO.GetFolder(str)
For Each objFile In objFolder.Files

    ' Use DateLastModified for modified date of a file
    If objFile.DateCreated < (Now() - 5) Then
        objFile.Delete(True)
    End If

Next
For Each objSubFolder In objFolder.SubFolders
    Search(objSubFolder.Path)

    ' Files have been deleted, now see if the folder is empty.
    If (objSubFolder.Files.Count = 0) Then
        objSubFolder.Delete True
    End If

Next
End Sub

2 个答案:

答案 0 :(得分:0)

为什么不使用FORFILES命令?

REM This will print the files which have not been modified in the last 90 days.
FORFILES /P "C:\Dir\To\Clean" /S /D -90 /C "CMD /C ECHO @path"

REM This will _delete_ the files which have not been modified in the last 90 days.
FORFILES /P "C:\Dir\To\Clean" /S /D -90 /C "CMD /C DEL /F @path"

答案 1 :(得分:0)

让我们看看我是否正确理解了您的问题:您希望删除第一级子文件夹及其所有内容,前提是它们不包含任何比X天更新的文件。那是对的吗?如果是这样,你可以这样做:

mainfolder = "C:\main\folder"
maxAge     = 5 'days

Set fso = CreateObject("Scripting.FileSystemObject")

Function HasNewFiles(fldr)
  HasNewFiles = False

  For Each f In fldr.Files
    If DateDiff("d", f.DateLastModified, Now) < maxAge Then
      HasNewFiles = True
      Exit Function
    End If
  Next

  For Each sf In fldr.SubFolders
    HasNewFiles = HasNewFiles(sf)
    If HasNewFiles Then Exit Function
  Next
End Function

For Each subfldr In fso.GetFolder(mainfolder).SubFolders
  If Not HasNewFiles(subfldr) Then subfldr.Delete True
Next