一、以下是用Forfiles来完成。 :: 删除N天以前修改过的文件。 @echo off set date=2 ::设定要删除多少天以前修改过的文件。 set FilePath=d:\test ::设定要删除的文件目录。 forfiles /p %FilePath% /d -%date% /s /m *.* /c "cmd /c del /f @path" echo 已经删除了修改日期为%date%天以前的文件,请按任意键继续... pause>nul :: 删除指定目录及其子目录下的空文件夹(安静版) for /l %%i in (1 1 10)do (for /f "delims=" %%a in ('dir /b/s/ad "%FilePath%"') do ( 2>nul rd "%%a\")) :: 蓝色(1 1 10)其中的10指的是你目录中文件夹的层数。填写大于你文件夹的层数。例:d:\a\b\c\d 这里只有三层就到d了。所 以我们只要填4就可以了。一般十层也够多了。当然你也可填100。只不过运行速度稍有影响。 :: 蓝色d:\a\指的是你要删除空文件夹所在的目录。 :: 例:d:\ (删除d盘下。包括子父级内的所有空文件夹) 或者d:\a\ (删除d盘a目录下。包括子父级内的所有空文件夹) echo 已经删除了"%FilePath%"目录下的全部空目录,请按任意键退出程序... pause>nul @exit 例二:用vbs代码来完成。 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("Wscript.Shell") OlderThanDate = DateAdd("d", -0, Now) '如果要删除3日前的文件,将0为-3 Set c_folder = fso.GetFolder("D:\test") Set c_fileCollection = c_folder.Files For Each c_file In c_fileCollection If c_file.DateLastModified < OlderThanDate Then ff = 1 '此文件夹中有文件 End If Next Set c_folderCollection = c_folder.SubFolders For Each c_subFolder In c_folderCollection If c_subFolder.DateLastModified < OlderThanDate Then sff = 1 '此文件夹中有子文件夹 End If Next If ff or sff then '此文件夹中有文件或子文件夹 DeleteOldFiles "D:\test", OlderThanDate objShell.Run("%comspec% /c xcopy D:\test Z:\SPBK-D /Y /S /E"),1,True DeleteOldFiles "D:\test", OlderThanDate End if Set objShell = Nothing set fso = nothing Sub DeleteOldFiles(folderName, BeforeDate) Dim folder, file, fileCollection, folderCollection, subFolder Set folder = fso.GetFolder(folderName) Set fileCollection = folder.Files For Each file In fileCollection If file.DateLastModified < BeforeDate Then fso.DeleteFile(file.Path) '删除文件 End If Next Set folderCollection = folder.SubFolders For Each subFolder In folderCollection subFolder.delete '删除子文件夹 'DeleteOldFiles subFolder.Path, BeforeDate 如果只是删除子文件夹下的文件而不删除子文件夹,可以使用此行 Next End Sub |
|