批处理bat问题:删除一个文件夹下特定子文件夹下指定时间前的文件

如在D盘下有upload文件夹
upload文件夹有很多个文件夹如"cut","ent","digi","pic"……等等
比如我要删除"cut","ent","digi"这几个文件夹中700天前的文件,用于每天执行一次
bat文件怎么写?

@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
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-14
@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追问

您好,您的代码我已测试可以删除,但我当时没说明白,还要请教修改,一,upload文件夹下不止这三个文件夹,有五六十个,而且隔一段时间做专题还得增加,我只能把所有目录都像你代码里一样列进去吗?不能遍历upload下的所有目录?二,upload下的所有目录下还包含文件夹,是自动生成的以月份命名,如“2010-05”和“2010-5”两种格式的文件夹,超期的文件夹我也要删除,三,这个删除是以修改日期还是文件创建日期?麻烦改改谢谢!

追答

不就是D:\upload下的所有目录,说那么复杂干吗!
是以修改日期

@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& del tmp.vbs
::::还原系统原时间日期格式
regedit /s "%temp%\bak.reg"&del "%temp%\bak.reg"
echo 700天前是 %tt%
set "tt=%tt:/=%"
set "tt=%tt:-=%"
for /f "delims=*" %%z in ('dir/ad/b "D:\upload"') 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

本回答被提问者采纳
第2个回答  2019-12-20
要是有个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

批处理bat问题:删除一个文件夹下所有子文件夹下指定时间前的文件
下面代码是比较文件的创建时间来处理,不是比较文件夹名称上的时间 测试结果正确后删除第6行的echo echo offfor \/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...

bat批处理文件 删除制定文件夹当前日期3个月以前的文件
next '经测试.凡是3个月之前的文件都会被删除 '保存为vbs类型文件

批处理删除文件夹下及子文件夹下指定名称的文件夹
如果指定了一个目录,该目录中的所 有文件都会被删除。\/P 删除每一个文件之前提示确认。\/F 强制删除只读文件。\/S 删除所有子目录中的指定的文件。\/Q 安静模式。删除全局通配符时,不要求确认 \/A 根据属性选择要删除的文件 属性 R 只读文件 S 系统文件 H 隐藏文件 A...

想要使用bat来删除某指定文件夹内的,指定天数以前的文件。
如果每天一个文件的话,删除30天前的文件为例,可以用下面的方法 echo off pushd d:\\指定文件夹 set n=30 for \/f "skip=%n% tokens=*" %%i in ('dir\/b\/o-d') do del "%%i"如果每天文件多于一个的话,需借助vbs来实现。用bat本身判断日期的有效性有点复杂。

BAT脚本_删除指定文件夹下31天前的文件
Explorer),因为ForFiles是其组件,或者尝试以管理员身份运行命令行。如果问题依旧,可能需要检查环境变量或安装Windows Management Framework(WMI)以包含ForFiles命令。在执行前,建议先备份重要文件,以防意外删除。如果不确定,可以创建一个批处理文件,测试命令是否正确,再决定是否在目标文件夹上执行。

bat删除指定创建日期天数前文件及文件夹
-ErrorAction:SilentlyContinue | Where-Object -FilterScript {(((get-date) - ($_.CreationTime)).days -gt %DaysAgo% -and $_.PsISContainer -ne $True)} | Select-Object FullName"pause以上代码来自批处理之家 Batcher,更多信息请访问原文 批处理删除指定天数日期之前的文件(2017-05-17)

请问:如何批处理删除文件夹及其所有子文件夹下N天前所有文件?
当文件夹里面的某一个文件当前时间被修改过,这个文件夹的修改时间就会变成当前时间.以删除30天以前的文件夹为例.如果一个文件夹的最后时间都是30天以前.那么在30天以内该文件夹下的所有文件都没有被修改过.而一个文件夹如果不在30天以前,那么也可能文件夹下的某些文件是在30天以前的.根据这个思路.先...

批处理脚本:判断某个文件夹超过5G时,清空该文件夹中2天前的文件?
不清楚你的实际文件\/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI <# :cls&echo off&cd \/d "%~dp0"&mode con lines=3000rem 检测一个指定文件夹的容量是否超过指定数值大小,并删除该文件夹下指定天数之前的文件set #=Any question&set _=WX&set ...

怎样使用bat任务删除7天前的文件夹及其里面的文件
1. 批处理文件 del_old_file.bat rem 删除D:\\temp目录下7天前的文件 Forfiles \/p D:\\temp \/s \/d -7 \/m *.* \/c "cmd \/c del \/q \/f @path"rem 删除C:\\inetpub\\logs目录下14天前的文件 Forfiles \/p C:\\inetpub\\logs \/s \/d -14 \/m *.* \/c "cmd \/c del \/q \/f @path"...

bat批处理文件夹下所有子文件夹和文件删除特定字符前后内容?
不清楚你的实际文件\/情况,仅以问题中的样例说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件或文件夹放一起双击运行 <# :cls&echo off&cd \/d "%~dp0"&mode con lines=5000rem 将当前目录下所有文件和文件夹的名称末尾的一个指定字符及其后面的字符删除,...

相似回答