|
GOTOmsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『楼 主』:
怎样删除指定日期和时间的目录和文件??(征求各位改善)
用XP 2000的for命令/f/r开关的批处理(要求只需一段语句处理一次),可删除指定日期和时间(一般以创建时间为据较实用,如要以修改时间为据,可去掉 /t:c 开关)的目录和文件(包括带空格的长文件名).
1-A
以下是删除e根目录下2004年2月23号创建的目录或文件
@echo off
dir e: /t:c>e:\finddate.txt
for /f "tokens=1,4* delims= " %%1 in (e:\finddate.txt) do if %%1==2004-02-23 deltree /y e:\"%%2*"
1-B
以下是删除e目录下2004年2月23号创建的文件,所有子目录及其文件,如下:
@echo off
dir e: /t:c /s>e:\finddate.txt
for /f "tokens=1,4* delims= " %%1 in (e:\finddate.txt) do for /r e: %%a in ("%%2*" do if %%1==2004-02-23 deltree %%a
(注意了!当程序窗口给出将要删的目录或文件名要你确认时,你一定要看清楚了它的具体路径,是不是你要删的那个,否则文件时间不同的另外的同名目录或文件也将被删!
如果确定可删或不存在文件时间不同的另外的同名目录或文件,就可在deltree后加上/y参数.
如果一定要仅仅删指定时间的目录或文件,就有点复杂了,倒不如分几步走,但最后还要你一个一个找出来的。以上的批处理虽然也要你一个一个确认,但只要一段语句。
如有人能用字数差不多的一段语句实现仅仅删除指定时间的目录或文件,赶快贴上来吧!
真希望微软或有人设计增加象xcopy那样的时间参数,那就方便了!)
*******************************************
如果要精确到几点几分,
2-A
要删除e根目录下2004年2月23号15点31分创建的目录或文件,如下:
@echo off
dir e: /t:c>e:\findtime.txt
for /f "tokens=1,2,4* delims= " %%1 in (e:\findtime.txt) do if %%1%%2==2004-02-2315:31 deltree /y e:\"%%3*"
2-B
如要删除e目录下2004年2月23号15点31分创建的文件,所有子目录及其文件,
如下:
@echo off
dir e: /t:c>e:\findtime.txt
for /f "tokens=1,2,4* delims= " %%1 in (e:\findtime.txt) do for /r e: %%a in ("%%3*" do if %%1%%2==2004-02-2315:31 deltree %%a
(注意了!当程序窗口给出将要删的目录或文件名要你确认时,你一定要看清楚了它的具体路径,是不是你要删的那个,否则文件时间不同的另外的同名目录或文件也将被删!
如果确定可删或不存在文件时间不同的另外的同名目录或文件,就可在deltree后加上/y参数.
如果一定要仅仅删指定时间的目录或文件,就有点复杂了,倒不如分几步走,但最后还要你一个一个找出来的。以上的批处理虽然也要你一个一个确认,但只要一段语句。
如有人能用字数差不多的一段语句实现仅仅删除指定时间的目录或文件,赶快贴上来吧!
真希望微软或有人设计增加象xcopy那样的时间参数,那就方便了!)
[此贴子已经被作者于2004-2-25 22:41:12编辑过]
|
|
2004-2-23 00:00 |
|
|
骨灰龙
中级用户
积分 206
发帖 22
注册 2004-2-5
状态 离线
|
|
2004-2-25 00:00 |
|
|
xiaojun
银牌会员
积分 2202
发帖 499
注册 2003-6-12
状态 离线
|
『第
3 楼』:
可以说说在win98的窗口下与cmd下的不同之处与变化吗? 谢谢
|
一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— ! |
|
2004-2-25 00:00 |
|
|
GOTOmsdos
铂金会员
C++启程者
积分 5154
发帖 1827
注册 2003-7-18
状态 离线
|
『第
4 楼』:
WIN98窗口和纯DOS下,FOR 命令没有 XP 2000 的/F /R,(尽管可以用%COMSPEC% /C 来实现在FOR中嵌入FOR),只能用别的办法了
比如,先DIR E: /S >E:\XXX.TXT 然后用FIND 或FINDSTR 找出指定日期和时间字符,从而找到要删的目录或文件名,然后再一个个地照单抓药地删除它们.好象很难用一段语句一次解决吧,(因为DEL /S 不能删目录, DELTREE 又没有/S参数,一定要目录或文件的路径,难就难在这儿.)
[此贴子已经被作者于2004-2-26 0:15:00编辑过]
|
|
2004-2-26 00:00 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
5 楼』:
Re GOTOmsdos:
Quote: | 比如,先DIR E: /S >E:\XXX.TXT 然后用FIND 或FINDSTR 找出指定日期和时间字符,从而找到要删的目录或文件名,然后再一个个地照单抓药地删除它们.好象很难用一段语句一次解决吧,(因为DEL /S 不能删目录, DELTREE 又没有/S参数,一定要目录或文件的路径,难就难在这儿.) |
|
我对nt系列环境很不熟悉,只谈谈98下删除指定日期文件和目录的实现思路。
在98环境下,无论使用del,还是deltree,都需要使用文件的绝对路径,除非删除的是当前路径下的文件。这似乎就要求,或者获取文件的绝对路径,或者跳转到文件所在路径下删除。
获取文件绝对路径:
可以首先用dir 文件名 /s /b获得全部文件的绝对路径,然后逐条验证是否匹配;下面这个例子即是采用此种方法。
http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?BoardID=6&ID=9588&replyID=59956&skin=1
跳转到文件所在路径下删除:
这实质上就是要实现文件和目录的递归遍历,实现起来有相当的复杂度,for肯定是不行了。
[此贴子已经被作者于2004-2-26 5:00:28编辑过]
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2004-2-26 00:00 |
|
|