现在只能删除n天前的指定文件夹。但是不能实现删除指定文件内n天前的文件夹。求个解决方法
外部循环用于遍历目标文件夹中的所有子文件夹。内部循环使用WMIC命令获取当前日期和时间,并与文件夹的创建日期进行比较,以确定其是否要删除。如果文件夹的创建日期早于n天前的日期,则会删除该文件夹。正式使用前一定要充分测试,避免误删:
@echo off
setlocal
rem 目标文件夹
set "targetFolder=X:\TargetFolder"
rem n天前
set /A "daysAgo=7"
for /F "delims=" %%F in ('dir /B /A:D "%targetFolder%"') do (
set "folderPath=%targetFolder%\%%F"
for /F %%A in ('WMIC OS GET LocalDateTime ^| findstr /B [0-9]') do set "dateTime=%%A"
set "folderDateTime=%%~tF"
setlocal enabledelayedexpansion
if "!folderDateTime:~0,10!" lss "!dateTime:~0,8!" (
set /A "dateDiff=(!dateTime:~0,4!-!folderDateTime:~0,4!)*365+(1!dateTime:~4,2!-1!folderDateTime:~4,2!)*30+1!dateTime:~6,2!-1!folderDateTime:~6,2!"
if !dateDiff! gtr %daysAgo% (
echo Deleting folder: !folderPath!
rd /S /Q "!folderPath!"
)
)
endlocal
)
endlocal
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
可以使用for循环来遍历指定文件夹内的所有文件夹,然后判断每个文件夹的创建时间是否在n天之前,如果是则删除该文件夹。具体代码如下:
@echo off
set folder_path=C:\test_folder
set days_to_keep=7
for /D %%i in ("%folder_path%\*") do (
forfiles /P "%%i" /C "cmd /c if @isdir==TRUE echo @path @fdate && if @isdir==TRUE if @fdate < %days_to_keep% echo rd /s /q @path" /D -%days_to_keep%
)
上述代码中,folder_path
变量指定要删除文件夹的路径,days_to_keep
变量指定保留多少天内的文件夹,可以根据实际需要修改。
for循环遍历指定文件夹内的所有文件夹,/D
参数表示只处理目录,%%i
是循环变量,表示每个文件夹的路径。
forfiles命令用于处理每个文件夹内的文件,/P
参数指定要处理的文件夹路径,/C
参数指定要执行的命令,@isdir
表示当前文件是否是文件夹,@path
表示当前文件的完整路径,@fdate
表示当前文件的创建时间。
如果当前文件是文件夹,就打印出其路径和创建时间,方便调试。如果当前文件是文件夹且创建时间在n天前,就执行删除命令。注意,删除命令是通过打印输出来实现的,可以先运行脚本检查输出是否正确,然后再把echo
去掉执行真正的删除操作。
希望以上代码对您有所帮助。