我需要帮助调整以下代码或新代码,甚至定期清理特定目录。我尝试过在网上找到的一些解决方案,但似乎没有一个能正常工作。我基本上需要一个命令,根据修改日期删除超过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
答案 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