中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何删除以系统日期创建的前一天的文件夹
作者:
标题: 如何删除以系统日期创建的前一天的文件夹 上一主题 | 下一主题
joshualaw
初级用户





积分 132
发帖 62
注册 2007-6-5
状态 离线
『楼 主』:  如何删除以系统日期创建的前一天的文件夹

假设今天的日期是2007-08-03, 在C:\123\会以系统日期创建的文件夹,如:2007-08-03,怎样只删除前一天的文件夹及该文件夹下的所有文件,如:只删除 2007-08-02, 当天 2007-08-03 的不能被删除.

[ Last edited by joshualaw on 2007-8-3 at 11:55 PM ]

2007-8-3 23:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 2 楼』:  

VBS得到前一天的日期比较简单
msgbox date-1

2007-8-4 10:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
joshualaw
初级用户





积分 132
发帖 62
注册 2007-6-5
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by jmz573515 at 2007-8-4 10:08 AM:
VBS得到前一天的日期比较简单
msgbox date-1

能用P处理吗?因为我想把这一命令放在同一P处理里面去运行

2007-8-4 10:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 4 楼』:  

不好意思,我对批更是一窍不通,帮不了你。

2007-8-4 10:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
joshualaw
初级用户





积分 132
发帖 62
注册 2007-6-5
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by jmz573515 at 2007-8-4 10:38 AM:
不好意思,我对批更是一窍不通,帮不了你。

不要紧啊!还是谢谢你的热心啊!看看其他兄弟能否帮忙啊,本人太菜了也想不出来啊!

2007-8-4 10:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

P可以,只是……每个月的天数不固定,所以对1号会有点麻烦……尤其是3月的话

2007-8-4 11:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
joshualaw
初级用户





积分 132
发帖 62
注册 2007-6-5
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by slore at 2007-8-4 11:47 AM:
P可以,只是……每个月的天数不固定,所以对1号会有点麻烦……尤其是3月的话

能否把代码写在这儿啊,至于1号很麻烦话,到时我用手工删除啊

2007-8-4 12:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  

@echo off
set Year=%date:~0,4%
set Month=%date:~5,2%
set Day=%date:~8,2%
set /a YstDay=Day-1
echo %Year% %Month% %Day% %YstDay%
pause

所以如果是1号,那么昨天可能是30,31或者28,29……日期牵扯到2月就麻烦了。

2007-8-4 13:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
joshualaw
初级用户





积分 132
发帖 62
注册 2007-6-5
状态 离线
『第 9 楼』:  

在试运行后,发现以下问题啊!
1》当两个日期之差为位数时,怎样把日期前面的0显示出来,例如:YstDay=Day-1 =09

2》当天数正好等于本月份数时,例如:2007-08-08, 或者两天之差等于本月份数时,例如: 2007-08-09 YstDay=Day-1=2007-08-08显示出来的日期有问题啊,也可能是比较复杂的原因吧。

3》关键是把 %Year% %Month% %YstDay% 付给某一变量,例如:
set datevar=%Year%-%Month%-%YstDay%
echo %datevar%

在上面 1》,  2》 中,要使变量 %datevar% 分别是:

2007-08-09

2007-08-07,2007-08-08

然后进入相应的目录删除即可,如太复杂了话,能否考虑下面的啊。

刚刚搜索了一下,发现zybird 兄以前发表的可能较简单和实用啊,但有两个命令(GetInfo.COMdirt.com)不能找到啊,那位能分享一下啊和告知这两个命令有无OS的限止, 也引用如下:

批处理的内容是这样的:
******************************************************
@echo off

rem ============================================
rem 这个批处理的作用是删除d:\datafile里面
rem 最后一次修改是7天之前(不包括7天)的
rem 所有文件(包括所有子目录里的文件)
rem ============================================



rem ============================================
rem 得到7天前的日期
rem 如果今天是8月25,则7天前是日期是 8月18日
rem ============================================
GetInfo.COM /d:-7
set theDay=%year%-%mon%-%day%



rem ============================================
rem   这是在D:\datafile中搜索8天前(含8天)修改过的文件
rem  即8月17日 及 之前 修改的文件
rem ============================================
attrib/s d:\datafile\*.* -h -r -s
:Loop
dirt.com /d:-%theDay% d:\datafile\*.* /q
if %DirtRet%==Fail goto end
del %FPath%\%FName%
goto Loop

:end

[ Last edited by joshualaw on 2007-8-4 at 05:43 PM ]

2007-8-4 17:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 10 楼』:  

willsort的代码楼主没有搜索到?
:: DateDel2.bat - 删除指定路径下指定日数以前修改的文件
:: Will Sort - 2005-9-2 - CMD@WinXP
:: 注意事项:参数%1指定日数,昨天为1,前天为2,依次类推
::           参数%1指定文件路径,省略时将处理当前路径
:: 核心算法:Ritchie Lawrence, updated 2002-08-13. Version 1.1
::
@echo off & setlocal ENABLEEXTENSIONS
call :Date2Day %date:~0,10% sdays
set /a sdays-=%1
call :Day2Date %sdays% difdate
echo 将删除 %cd% 下 %difdate% 前的修改的以下文件:
for /r %2 %%f in (*.*) do if "%%~tf" LEQ "%difdate%" echo "%%f"
goto :EOF

:Date2Day
setlocal ENABLEEXTENSIONS
for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  set yy=%%a & set mm=%%b & set dd=%%c
)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %2=%j%&goto :EOF

:Day2Date
setlocal ENABLEEXTENSIONS
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF




三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-8-4 18:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
aspirer
初级用户





积分 72
发帖 35
注册 2006-11-13
状态 离线
『第 11 楼』:  

Why not use tool on windows 2003 ?
You can try "forfiles.exe"



Novell 迷http://novell.me
2007-8-4 19:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
joshualaw
初级用户





积分 132
发帖 62
注册 2007-6-5
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by ccwan at 2007-8-4 06:10 PM:
willsort的代码楼主没有搜索到?
[code]:: DateDel2.bat - 删除指定路径下指定日数以前修改的文件
:: Will Sort - 2005-9-2 - CMD@WinXP
:: 注意事项:参数%1指定日数 ...

不好意思,太复杂了,好象文件夹不能被删除啊,所以能否考虑回原来的啊


『第 8 楼』:

@echo off
set Year=%date:~0,4%
set Month=%date:~5,2%
set Day=%date:~8,2%
set /a YstDay=Day-1
echo %Year% %Month% %Day% %YstDay%
pause

所以如果是1号,那么昨天可能是30,31或者28,29……日期牵扯到2月就麻烦了。
『第 9 楼』:
在试运行后,发现以下问题啊!每月的1号暂不考虑呢。

1》当两个日期之差为位数时,怎样把日期前面的0显示出来,例如:YstDay=Day-1 =09

2》当天数正好等于本月份数时,例如:2007-08-08, 或者两天之差等于本月份数时,例如: 2007-08-09 YstDay=Day-1=2007-08-08时显示出来的日期有问题啊,全部显示错误的日期 2007-08--1 应分别为 2007-08-072007-08-08

3》关键是把 %Year% %Month% %YstDay% 付给某一变量,例如:
set datevar=%Year%-%Month%-%YstDay%
echo %datevar%

在上面 1》,  2》 中,怎样使文件夹变量 %datevar% 分别以下列格式显示:

2007-08-09

2007-08-07,2007-08-08

然后先进入相应的目录删除文件,后 cd .. 再RD相应的目录 即可,请指点。

[ Last edited by joshualaw on 2007-8-4 at 08:10 PM ]

2007-8-4 19:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zxlxsqzy
初级用户





积分 126
发帖 47
注册 2007-7-2
状态 离线
『第 13 楼』:  

我提一个设想
把日期先转化成数字 比如2007-08-01先转化成20070801, 2007-08-05转化成20070805,这样的话今天的日期转化的数字肯定会比昨天的日期转化的数字要大
结果出来了
只要把今天的日期转化的数字和那些文件夹名字转化出来的数字对比,比今天小的全部删除掉.这样不会有2月份的牵涉.

2007-8-5 17:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 14 楼』:  

呵呵。20070801-1是多少?

20070800啊,没有

2007-8-5 17:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: