中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-29 05:36
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)如果在WINDOWS下DOS命令行删除N天以前的文件 精华I 查看 27,343 回复 39
16 发表于 2005-08-26 20:17 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
Re Will Sort:

嘿嘿,之所以我只用for /f,是因为说实在的,我一直没有太搞明白for命令的很多用法,至少我一直就不太明白for /r是什么意思,但刚才我自己试了一下,终于是明白一点儿了,所以我那条命令可以改成:
for /r %dst% %%f in (*.*) do if %%~tf LSS %1 del /f /q %%f && echo 删除 %%f

呵呵,原因就是这么简单,我对技术的追求不象Wil兄那样执着,我的目标就是完成任务就好。说实在的,我对Wil兄写批处理的技巧是打心底里佩服的,但却感觉自己永远也达不到这种水平,而且我觉得Wil兄的批处理技巧是有余了,但实在不容易让人看明白,你楼上那个批处理,直到回这个帖子的时候我才算是看明白了。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
17 发表于 2005-08-29 13:40 ·  中国 广东 潮州 电信
中级用户
★★
积分 240
发帖 53
注册 2005-01-21 00:00
21年会员
UID 35493
性别 男
状态 离线
前些天我写了两个Dos下的小程序,刚好可以完成这项任务。

批处理的内容是这样的:
******************************************************
@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


******************************************************



里面的DirT.com和GetInfo.com可以到http://www.13886.com/soft//下载,


win2000的Dos里del命令好象有一个参数,可以在删除文件的时候不用用户的确认,你可以在del %FPath%\%FName%里加入那个参数

[ Last edited by zybird on 2006-5-6 at 13:38 ]
18 发表于 2005-08-29 17:02 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
这两个命令倒挺有意思,也很有用,能不能直接用附件传到这里来,因为那个网址无法访问了。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
zjutsoft +1 2008-07-17 11:02
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
19 发表于 2005-08-29 18:47 ·  中国 广东 潮州 电信
中级用户
★★
积分 240
发帖 53
注册 2005-01-21 00:00
21年会员
UID 35493
性别 男
状态 离线
Originally posted by Climbing at 2005-8-29 05:02 PM:
这两个命令倒挺有意思,也很有用,能不能直接用附件传到这里来,因为那个网址无法访问了。



在ys168上不知道为什么总是会出现无法下载,现在我上传到这里。

如果使用的过程,有什么疑问或出现什么错误,请告诉我!谢谢!


Getinfo.com 和 dirt.com 可以直接在下面这个网址下载了!!

http://www.13886.com/soft/

[ Last edited by zybird on 2006-5-6 at 13:37 ]
20 发表于 2005-08-29 23:47 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
谢谢zybird朋友,这两个命令都是用Qbasic开发的吧?
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
21 发表于 2005-08-30 13:10 ·  中国 广东 潮州 电信
中级用户
★★
积分 240
发帖 53
注册 2005-01-21 00:00
21年会员
UID 35493
性别 男
状态 离线
不客气!

这是用 tc++ 3.0写的
22 发表于 2005-09-02 15:25 ·  中国 山西 太原 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re All:

因为个人原因,一个星期没有来论坛了,发现变化真是不小!现在附上9楼解题思路中1提到的set /a计算日期差值的方案。至于第三方程序,zybird的程序已经很好了,向 zybird 兄致敬。

:: 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 ate2Day %date:~0,10% sdays
set /a sdays-=%1
call ay2Date %sdays% difdate
echo 将删除 %cd% 下 %difdate% 前的修改的以下文件:
for /r %2 %%f in (*.*) do if "%%~tf" LEQ "%difdate%" echo "%%f"
goto :EOF

ate2Day
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

ay2Date
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
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
23 发表于 2005-10-17 19:56 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
21年会员
UID 36626
性别 男
状态 离线
请问下各位大侠
为什么在win2000的命令行下无法显示year mon day 等环境变量?

D:\MULTIT~1\Getinfo>getinfo /d:-2
D:\MULTIT~1\Getinfo>echo %day%
%day%
24 发表于 2005-10-17 20:10 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
21年会员
UID 36626
性别 男
状态 离线
Quote:
Originally posted by Climbing at 2005-8-25 17:38:
for /f "tokens=*" %f in ('dir /b/s' do @if %~tf LSS 2005-08-17 echo %~tf %f

强啊!!!



同意!!!

[ Last edited by smileseeker on 2005-10-17 at 20:12 ]
25 发表于 2005-10-19 21:10 ·  中国 广东 潮州 电信
中级用户
★★
积分 240
发帖 53
注册 2005-01-21 00:00
21年会员
UID 35493
性别 男
状态 离线
getinfo.com目前还无法修改cmd.exe中的环境变量,cmd.exe跟dos不一样
26 发表于 2005-11-10 00:20 ·  中国 浙江 杭州 电信
新手上路
积分 10
发帖 5
注册 2005-11-09 22:55
20年会员
UID 44940
性别 男
来自 中国杭州
状态 离线
“for /f "tokens=*" %f in ('dir /b/s') do @if %~tf LSS 2005-08-17 echo %~tf %f”
里面的“%”在这里代表什么呀,请哪位指点一下?
27 发表于 2007-06-08 09:35 ·  中国 江苏 无锡 电信
初级用户
积分 80
发帖 43
注册 2007-04-21 23:44
19年会员
UID 86017
性别 男
状态 离线
我靠,看不懂````晕了。
28 能不删除文件夹 发表于 2007-10-10 10:23 ·  中国 山东 泰安 联通
新手上路
积分 2
发帖 1
注册 2007-10-10 09:40
18年会员
UID 99318
性别 男
状态 离线
上面方法删除文件好用,能不能不删除文件夹?
29 发表于 2007-10-10 19:24 ·  中国 北京 鹏博士BGP
新手上路
积分 12
发帖 4
注册 2006-10-24 11:19
19年会员
UID 68043
性别 男
状态 离线
菜鸟请教地区为英文的操作系统 date显示为10/10/2007 wed 批处理应该怎么写??
30 发表于 2007-10-12 09:54 ·  中国 四川 德阳 联通
初级用户
积分 51
发帖 24
注册 2007-09-18 17:11
18年会员
UID 97711
性别 男
状态 离线
牛人啊,,,太强了...学得不少
论坛跳转: