写个bat删除指定文件夹下某天前所有文件信息

比如:删除E:\DiffZipRUL下2天前变更过的所有文件
能在windows server 2008下能运行
(坐等)50分,满意再送50
比如:E:\DiffZipRUL目录下有A、B、C文件或文件夹,B昨天修改过,A,C2天类没有修改过,执行Bat后会删除A、C,B不会被删除,因为2天内修改过

非bat也行,比如C#小外挂程序也可以~

@echo off
::搜索并显示指定目录下(当前日期-修改日期>两天)的文件
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/ " %%a in ('echo %date%') do set tday=%%a%%b%%c
::测试路径E:\DiffZipRUL,测试子目录搜索
::dir /s/b/a-d-h显示当前目录下的文件(子目录,简单格式,不显示目录,不显示隐藏文件
for /f "tokens=1 delims=" %%a in ('dir /s/b/a-d-h "E:\DiffZipRUL"') do (
set fname=%%a
::dir /tw显示修改时间
for /f "tokens=1-3,6 delims=/ " %%b in ('dir /tw "!fname!"^|findstr/v "字节"^|findstr/v "目录"^|findstr/v "卷"^|findstr/v "DIR"') do (
::取文件修改日期,然后+2表示两天的时间差
set /a fday=%%b%%c%%d
set /a fday+=2
::如果文件修改日期加上两天还是比当前日期小,那么表示修改于两天前,这里用echo !fname!显示符合条件的文件,以作调试,实际应用时改成需要的动作,比如删除就写作del "!fname!" /Q这样
if !fday! lss !tday! (echo "!fname!")
)
)

pause追问

运行结果:

运算符不存在。
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
请按任意键继续. . .

追答

这样,昨天是在WIN7下调试的,因为WIN7的时间显示用斜杠分隔,而2008可能是用减号分隔的,所以会出现运算符不存在,刚才在2003下测试了一下(实在是没有2008的环境),把两处delims=/ "替换成delims=- ",运行通过。虽然没用过2008这样的高级货,我觉得还是可以再尝试一下。

另外,第三条for命令:for /f "tokens=1-3,6 ...这一句中的,6没有用到,可以去除改成for /f "tokens=1-3 ...。

另外,for /f "tokens=1 delims=" %%a in ('dir /s/b/a-d-h "E:\DiffZipRUL"') do (这一句里排除了目录和隐藏文件,如果需要的话,请把dir搜索参数改成dir /s/b/a,然后删除目录用rd "!fname!" /s/q,而且删除目录可能要执行两次(如目录中有子目录的话),但是目录修改时间不会随着目录下文件的修改而改变,所以不建议用这样的方式删除目录。

看了下那个附件,用forfiles确实是简单有效的办法,只要一条命令就完事了,
forfiles /p 路径 /m 文件通配规则 /s /d 与当前日期差值(前两天就是-2) /c 执行的动作

追问

~~~~~
运行结论:
找不到文件
请按任意键继续. . .

时间格式应该是调试对了
forfile我自己也用过……貌似2008不得行

我自己写来个~搞定~ 还是感谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-22

不是太明天你的意思,这有个以前写的,你参考下。


追问

看了下,可以查到文件,正确的。。。我的意思是:E:\DiffZipRUL这个目录下有各种文件,我想删除这个目录下2天前的所有文件及文件夹,按照修改时间来计算时间,不是按照创建时间来计算时间(2天前)

相似回答