这个批处理文件如何写。删除前7天的文件,高手请教

dawnming 2006-01-16 09:32:52
文件的格式都是日期为文件名的txt文件,如20051212.txt 20051213.txt 20051214.txt这样
现在 想做一个批处理,删除当前时间前七天的txt文件,比如今天是20060116,那就是删除20060109以前的TXT文件,高手请教
...全文
476 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
spark_li 2006-01-19
  • 打赏
  • 举报
回复
如果解决了你的问题,记得提交FAQ了,好久没有长信誉分了。

spark_li 2006-01-19
  • 打赏
  • 举报
回复
经过在xp sp2 专业版上测试是没有问题的
因为dateadd函数取回的日期,比如2006-01-04
它会返回2006-1-4
所以在后面用
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%

几句进行处理,如果小于9就在前面补0
spark_li 2006-01-19
  • 打赏
  • 举报
回复
@echo off
Rem 取7天之前的日期,取回放入变量nowdate
echo wscript.echo dateadd("d",-7,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
set nowdate=%y%%m%%d%

Rem 删除文件,修改下面的deldir变量为你要需要删除的文件所在的目录
set deldir=d:\xtmp\tmp\debug

for /f "delims=." %%i in ('dir /b %deldir%') do (
if %%i LSS %nowdate% del /f %deldir%\%%i.txt
)


spark_li 2006-01-18
  • 打赏
  • 举报
回复
哎呀,这个我也没有看仔细,
这个好办
比如今天是
20060118
手动计算得到
七天前是
20060111
把我批处理里面的
set /a nowdate=%date:~0,4%%date:~5,2%%date:~8,2%
修改为
set /a nowdate=20060111
即可

mudonfield 2006-01-18
  • 打赏
  • 举报
回复
好象是有点不妥。
有区别啊,楼主想保留前六天的文件哦!
bombwang 2006-01-18
  • 打赏
  • 举报
回复
mark
dawnming 2006-01-18
  • 打赏
  • 举报
回复
那位SPARK_LI,谢谢你的回答,可是不能手动做啊,要让程序自己来实现,该如何办啊.
lifewhy 2006-01-17
  • 打赏
  • 举报
回复
先在Wwindwos搜索出七天前的文件,然后按类型查看,你七天前的文档全出来了.就OK了.你怎样删除就看你的了.
spark_li 2006-01-17
  • 打赏
  • 举报
回复
晕啊,楼上的没有仔细看楼主的帖子吧,人家说得很清楚了
文件是以日期为名的,
把文件名字前缀取出来直接和当前日期比较大小就可以了。

今天以前和七天以前有区别么?
zhdaring 2006-01-17
  • 打赏
  • 举报
回复
楼上的是删除今天以前的文件,可要删除七天以前的文件,就要对日期进行运算,算出七天以前是什么日子才行。
spark_li 2006-01-17
  • 打赏
  • 举报
回复
附测试结果

D:\xtmp\tmp\Debug>dir
驱动器 D 中的卷是 Data
卷的序列号是 6455-AB0E

D:\xtmp\tmp\Debug 的目录

2006-01-17 13:59 <DIR> .
2006-01-17 13:59 <DIR> ..
2006-01-17 13:59 3 20060115.txt
2006-01-17 13:59 3 20060116.txt
2006-01-17 13:59 3 20060117.txt
2006-01-17 13:59 3 20060118.txt


D:\xtmp\tmp\Debug>test

D:\xtmp\tmp\Debug>dir
驱动器 D 中的卷是 Data
卷的序列号是 6455-AB0E

D:\xtmp\tmp\Debug 的目录

2006-01-17 14:00 <DIR> .
2006-01-17 14:00 <DIR> ..
2006-01-17 13:59 3 20060117.txt
2006-01-17 13:59 3 20060118.txt
spark_li 2006-01-17
  • 打赏
  • 举报
回复
既然你要删除的文件的名字这么有规律(以日期为名)
那么就很简单了
看下面的批处理test.bat

@echo off
set /a nowdate=%date:~0,4%%date:~5,2%%date:~8,2%
for /f "delims=." %%i in ('dir /b D:\xtmp\tmp\Debug') do (
if %%i LSS %nowdate% del /f %%i.txt
)



在xp sp2 专业版上测试通过
mudonfield 2006-01-16
  • 打赏
  • 举报
回复
这个批处理比较难处理的,对于文件时间的判断,可以用2003系统下的一个文件Forfile.exe,可以到2003系统下拷贝来用,在DOS下用 Forfile /?可以查看此命令的使用帮助。

不过还是建议用VBS脚本来处理。
zhy97031 2006-01-16
  • 打赏
  • 举报
回复
批处理不清楚,建议到microsoft的脚本中心看看

比如
http://www.microsoft.com/china/technet/community/scriptcenter/resources/hey0218.mspx

再结合日期参数,应该可以实现你要求的删除功能了

6,871

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧