中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理自动删除N天之前文件目录
<   <<   [1] [2] [3]  >>   >
作者:
标题: [已结]批处理自动删除N天之前文件目录 上一主题 | 下一主题
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 16 楼』:  

。。 [ Last edited by flyinspace on 2008-8-21 at 04:45 PM ]




知,不觉多。不知,乃求知
2008-8-21 16:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 17 楼』:  

问下。你生成的文件名是什么? 20080812?之样的?




知,不觉多。不知,乃求知
2008-8-21 16:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 18 楼』:  

顶楼有描述 2008-08-18




2008-8-21 16:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 19 楼』:  

现在假设你的文件夹里的文件都是按日期生成的。(我不理是什么文件名了) 千万不要乱自己建立文件夹了哦。:)嘿嘿。 那么给你一个简单的代码。不过不太安全,你要保证里面的文件不可以乱 下面是一句话代码 skip 是指跳过前 5 条
for /f "skip=5 tokens=* " %%i in ('dir /b /o-d /ad-h-s') do echo 要删除的文件名为:[%%i],语法格式: [rd /s /q "%%i"]
这里的代码可以测试,如果你发现满足你的条件。那么你就可以把rd那里的东西取出来了。。。。 记得,上面的条件是需要满足你说的每天建立一个备份文件夹的情况下才可以使用的。。而且该备份文件夹里不可以有其他的文件夹了。只能存在备份的文件。。 [ Last edited by flyinspace on 2008-8-21 at 04:59 PM ]




知,不觉多。不知,乃求知
2008-8-21 16:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 20 楼』:  

翻个老贴给你 不知道时间格式和你对不
@echo off
set TT=5&set "ph=d:\000"
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
    if %p3% gtr %TT%  goto ppp
:nxt
set/a p2-=1
   if %p2% equ 0 set/a p1-=1,p2=12
   set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
   for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3+=%%i
   if %p3% leq %tt% goto nxt
:ppp
set/a p3-=tt
setlocal enabledelayedexpansion
   for %%i in (p2 p3) do if !%%i! lss 10 set %%i=0!%%i!
     for /f "skip=7 tokens=1,3*" %%i in ('dir /ad /tc "%ph%" 2^>nul^|find /v "字节"') do (
       if %p1%-%p2%-%p3% gtr %%i rd /s /q "%ph%\%%k"
)
pause&exit




简单!简单!再简单!
2008-8-21 18:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 21 楼』:  

vbs文件是否在windows98、xp\2000\2003系统下都可以运行的? HAT的自动删N日前文件VBS似懂非懂 -------------------------------------------------------------------------------- 我要在win2000下自动删除目录rardata下的15天前的文件,要怎样改呢?win2003下有forfile是比较方便. @echo off >"%temp%\MyDate.vbs" echo dt=date()-5 >>"%temp%\MyDate.vbs" echo s=right(year(dt),4) ^& "-" ^& right("0" ^& month(dt),2) ^& "-" ^& right("0" ^& day(dt),2) >>"%temp%\MyDate.vbs" echo wscript.echo s for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do set FiveDay=%%a for /f %%a in ('dir /b /ad "D:\000"') do ( if "%%a" lss "%FiveDay%" ( rd /s /q "%%a" ) ) [ Last edited by qwertl on 2008-8-23 at 10:56 PM ]


2008-8-23 22:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 22 楼』:  Re 21楼

@echo off
setlocal enabledelayedexpansion
set SrcDir=D:\rardata
>"%tmp%\MyDel.vbs" echo dt=date()-15
>>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
>>"%tmp%\MyDel.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set DateFlag=%%a
for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"') do (
  set FileDate=%%~ta
  set FileDate=!FileDate:-=!
  set FileDate=!FileDate:~0,8!
  if !FileDate! lss %DateFlag% (
    del /f /q "%%a"
  )
)




2008-8-23 23:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 23 楼』:  

win2000的%data%是这样格式: 星期日 2008-08-24


2008-8-24 18:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 24 楼』:  Re 23楼

还不知道怎样修改这个吗?可以看看set的帮助。
@echo off
setlocal enabledelayedexpansion
set SrcDir=D:\rardata
>"%tmp%\MyDel.vbs" echo dt=date()-15
>>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
>>"%tmp%\MyDel.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set DateFlag=%%a
for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"') do (
  set FileDate=%%~ta
  set FileDate=!FileDate:-=!
  set FileDate=!FileDate:~4,10!
  if !FileDate! lss %DateFlag% (
    del /f /q "%%a"
  )
)


   此帖被 +2 点积分      点击查看详情   
评分人:【 qwertl 分数: +2  时间:2008-9-15 02:13




2008-8-24 20:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 25 楼』:  

谢谢HAT的耐心指点! 现在看正找到延迟变量的内容,批处理的内容也真不少。 如果要执行的批处理不存放在D:\rardata目录下,for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"') 的dir后要指定删去文件的目录路径吧? 这两句是起什么作用呢? s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2) wscript.echo s [ Last edited by qwertl on 2008-8-24 at 10:46 PM ]


2008-8-24 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 26 楼』:  

批处理放在什么地方都行,因为数据的目录是这里指定的: set SrcDir=D:\rardata s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2) wscript.echo s 调用VBS获取格式化的系统日期: www.cn-dos.net/forum ...




2008-8-24 23:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
AppleWolf
初级用户





积分 110
发帖 41
注册 2007-3-31
状态 离线
『第 27 楼』:  

这个我写好了,用的方法比较老套
set usbdisk=E:
set befor2days=
set nowdate=

echo wscript.echo dateadd("d",-2,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/a befor2days=%y%%m%%d%

echo wscript.echo dateadd("d",-0,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/a nowdate = %y%%m%%d%

........中间省略,日期整理为:20080825 这种格式,并以此为目录。

dir %usbdisk%\ /ad/on/b>%tmp%\usbdir.tmp
for /f "delims=" %%i in (%tmp%\usbdir.tmp) do (
			if %%i lss %befor2days% (
															rd /s/q %usbdisk%\%%i
															)
下面是判断是否是2天前的,如果是,就删,如果不是,就跳过。 希望各位高手不要笑我,我解决的办法有点笨。


2008-8-25 20:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwertl
中级用户





积分 461
发帖 243
注册 2007-10-14
状态 离线
『第 28 楼』:  

我们经常要在日常的工作中查找文件,要说linux下最强大的文件查找工具,非find莫属。find可以从文件名、读取修改时间、大小、类型等等来筛选文件,可以完成日常几乎所有的查找需求。   来看一个简单的例子:   find /tmp/ -name 'galeki*'   意思就是在/tmp目录下找出以“galeki”开头的文件,-name指出是对文件名进行筛选,是不是很简单明了?除了文件名,find还有更强大的筛选条件:   1.时间: 参数 意义 -atime n 上一次存取时间在n*24小时前以内的文件 用linux的find来实现是简单 -ctime n 上一次状态改变在n*24小时前以内的文件 -mtime n 上一次修改时间在n*24小时前以内的文件 -newer file 比file所指的文件还要新的文件


2008-9-15 02:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 29 楼』:  

没一个测试成功的。。 2000的时间格式为: 当前日期: 2008-10-20 星期一 希望哪位高手给个完整的


2008-10-20 23:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dddyjq1
初级用户





积分 175
发帖 108
注册 2008-5-19
状态 离线
『第 30 楼』:  

翻个老贴给你 ,测试成功的 @echo off SET TT=1 set p1=%date:~0,4% set p2=%date:~5,2% set p3=%date:~8,2% setlocal enabledelayedexpansion for /l %%a in (1,1,3) do ( for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i ) if %p3% gtr %TT% goto ppp :nxt set/a p2-=1 if %p2% equ 0 set/a p1-=1&&set p2=12 SET/a PN1=%p1%%%4 set PN2=28 if %PN1% EQU 0 set pN2=29 for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i if %p3% leq %tt% goto nxt :ppp set/a p3=%p3%-%tt% set p2=0%p2% set p2=%p2:~-2,2% set p3=0%p3% set p3=%p3:~-2,2% for /r "C:\新建文件夹\" %%i in (*.*) do set t=%%~ti &&call :loop "%%~fi" pause goto :eof :loop if not "%~1" == "%~f0" ( IF %p1%%p2%%p3% gtr %t:~0,4%%t:~5,2%%t:~8,2% del %1 )


2008-10-21 01:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<   <<   [1] [2] [3]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: