Board logo

标题: 如何删除以系统日期创建的前一天的文件夹 [打印本页]

作者: joshualaw     时间: 2007-8-3 23:54    标题: 如何删除以系统日期创建的前一天的文件夹

假设今天的日期是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 ]
作者: jmz573515     时间: 2007-8-4 10:08
VBS得到前一天的日期比较简单
msgbox date-1
作者: joshualaw     时间: 2007-8-4 10:28


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

能用P处理吗?因为我想把这一命令放在同一P处理里面去运行
作者: jmz573515     时间: 2007-8-4 10:38
不好意思,我对批更是一窍不通,帮不了你。
作者: joshualaw     时间: 2007-8-4 10:48


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

不要紧啊!还是谢谢你的热心啊!看看其他兄弟能否帮忙啊,本人太菜了也想不出来啊!
作者: slore     时间: 2007-8-4 11:47
P可以,只是……每个月的天数不固定,所以对1号会有点麻烦……尤其是3月的话
作者: joshualaw     时间: 2007-8-4 12:34


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

能否把代码写在这儿啊,至于1号很麻烦话,到时我用手工删除啊
作者: slore     时间: 2007-8-4 13:44
@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月就麻烦了。
作者: joshualaw     时间: 2007-8-4 17:29
在试运行后,发现以下问题啊!
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 ]
作者: ccwan     时间: 2007-8-4 18: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

作者: aspirer     时间: 2007-8-4 19:51
Why not use tool on windows 2003 ?
You can try "forfiles.exe"
作者: joshualaw     时间: 2007-8-4 19:59


  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 ]
作者: zxlxsqzy     时间: 2007-8-5 17:16
我提一个设想
把日期先转化成数字 比如2007-08-01先转化成20070801, 2007-08-05转化成20070805,这样的话今天的日期转化的数字肯定会比昨天的日期转化的数字要大
结果出来了
只要把今天的日期转化的数字和那些文件夹名字转化出来的数字对比,比今天小的全部删除掉.这样不会有2月份的牵涉.
作者: wudixin96     时间: 2007-8-5 17:25
呵呵。20070801-1是多少?

20070800啊,没有