@echo off
::功能:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件
rem 指定待删除文件的存放路径(兼容含有空格的文件夹)
set SrcDir=D:\upload\cut
rem 指定天数
set DaysAgo=700
::如果演示没问题,请把下行的 echo 删掉,以便实际删除文件。
forfiles /p "%SrcDir%" /s /m *.* /d -%DaysAgo% /c "cmd /c echo del /f /q /a @path"
pause >nul
@echo off
regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
::::统一格式化系统日期格式Win2000以上系统通用
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo [HKEY_CURRENT_USER\Control Panel\International]
>>aDate.reg echo "sShortDate"="yyyy-MM-dd"
>>aDate.reg echo "sDate"="-"
>>aDate.reg echo "sTimeFormat"="HH:mm:ss"
regedit /s aDate.reg&del aDate.reg
>tmp.vbs echo Wscript.echo FormatDateTime(DateAdd("d", -700 ,Date),2)
for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set tt=%%i&rem del tmp.vbs
::::还原系统原时间日期格式
regedit /s "%temp%\bak.reg"&del "%temp%\bak.reg"
echo 700天前是 %tt%
set "tt=%tt:/=%"
set "tt=%tt:-=%"
for %%z in ("cut","ent","digi") do call :slz %%z
echo 已完成
pause
:slz
if "%~1"=="" goto:eof
setlocal enabledelayedexpansion
for /f "delims=*" %%i in ('dir/s/a-d/b "D:\upload\%~1\*.*"') do (
for /f "delims= " %%a in ("%%~ti") do (
set "tti=%%a"
set "tti=!tti:/=!"
set "tti=!tti:-=!"
if !tti! lss %tt% del /f/a/q "%%i"&&echo 已删除 %%i
))
endlocal
goto:eof
要是有个2013111,这是11月1号,还是1月11号????????,本身这样做备份文件名就不太合理的,要做也做成yyyymmdd全用8位格式的.
下面代码是比较文件的创建时间来处理,不是比较文件夹名称上的时间
测试结果正确后删除第6行的echo
@echo off
for /f "tokens=1-3 delims=/- " %%a in ("%date%")do set/a y=%%a,m=1%%b%%100,d=1%%c%%100,"m=(m+9)%%12,y-=m/10+1900,i=365*y+y/4+(m*153+2)/5+d-1"
for /f "tokens=1,4" %%i in ('dir /tc/ad backup*^|find "
"') do (
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/- " %%a in ("%%i")do set/a y=%%a,m=1%%b%%100,d=1%%c%%100,"m=(m+9)%%12,y-=m/10+1900,i-=365*y+y/4+(m*153+2)/5+d-1"
if !i! gtr 7 echo rd /s/q "%%j"
endlocal
)
pause&exit /b