|
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.COM 和 dirt.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-07 和 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
然后先进入相应的目录删除文件,后 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 |
|