BAT删除指定文件夹下、特定文件类型、当前日期之外的文件

打算设置一个任务计划程序,每次启动的时候就去执行一个bat文件,bat文件的功能需求如标题所示(文件名称格式是YYYYMMDDHH)。
比如:
文件夹:D:\back
文件类型:*.dmp
假设D:\back文件夹下面有一下文件:
2016120106.dmp
2016120112.dmp
2016120118.dmp
2016120206.dmp
2016120212.dmp
2016120218.dmp
test.txt
delete.bat
...
假设今天是2016年12月02日,则需要删除2016120106.dmp、2016120112.dmp、2016120118.dmp这3个文件。
有哪位大神能写出这种代码,bat脚本没怎么研究过,有些命令短时间内弄不懂,给出满意的答复可以加金币。

只要你文件名称中不要带中文字符,下面的代码就可以实现你的要求
@echo off
set /a a=0
set /a b=0
set Date=%date:~,4%%date:~5,2%%date:~8,2%
for %%i in (d:\back\*.dmp) do call :Start %%i
goto :END
:Start
echo %1
set /a a=a+1
set filename=%~n1.dmp
echo ----------
set FileDate=%filename:~,8%
if not %FileDate% == %Date% del %1&& set /a b=b+1
goto ENDLOOP

:END
echo delete done!!(delete file:%b%/total file:%a%)
pause
:ENDLOOP追问

感谢你的回答,确实能够实现我需要的功能,不过我有几个疑问,想请教一下,结束之后悬赏我会加倍的。

下面是我根据我的理解做的修改和注释:

我无法理解的部分是%~n1和goto :ENDLOOP,%~n1是在网上没有找到对应的解释和用法说明;goto :ENDLOOP,按理说跳转后已经到了脚本末尾,为何脚本不会中断执行,而是回到上面继续执行呢?恳请大神赐教。

追答

1.~n1是在网上没有找到对应的解释和用法说明;
回答:变量说明如下
%~I 展开删除了周围的任何引号 (") 的 %I
%~fI 将 %I 展开到完全合格的路径名
%~dI 只将 %I 展开到驱动器号
%~pI 只将 %I 展开到路径
%~nI 只将 %I 展开到文件名
%~xI 只将 %I 展开到文件扩展名
%~sI 展开路径以只包含短名称
%~aI 将 %I 展开到文件的文件属性
%~tI 将 %I 展开到文件的日期/时间
%~zI 将 %I 展开到文件大小
2.goto :ENDLOOP,按理说跳转后已经到了脚本末尾,为何脚本不会中断执行,而是回到上面继续执行呢?
回答:因为前面用了For循环,会遍历每一个d:\back下面的dmp文件,所以有多少个文件,就会调用多少次:Start段.

温馨提示:答案为网友推荐,仅供参考
相似回答