中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-06 21:06
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何删除目录下的非rar文件? 查看 1,850 回复 15
楼 主 如何删除目录下的非rar文件? 发表于 2007-12-05 15:14 ·  中国 广东 广州 天河区 电信
初级用户
积分 36
发帖 15
注册 2007-11-23 17:11
18年会员
UID 103536
性别 男
状态 离线
目录下面有很多文件,包括rar文件,现在只想保留rar文件,其它都删除。

我知道如果删除rar文件的话用
for /r %a in (*.rar) do @del /s/q %a

就可以,但要保留rar而删除其它文件有没有好办法呢?
2 发表于 2007-12-05 16:26 ·  中国 上海 联通
初级用户
★★
积分 153
发帖 68
注册 2006-10-12 22:25
19年会员
UID 65507
来自 上海
状态 离线

@echo off
for /f "delims=/" %%i in ('dir /b/s *.*') do dir /b/s *.rar | find "%%i" || del "%%i"


[ Last edited by uemuem on 2007-12-5 at 06:53 PM ]
个人主页-找餐厅:http://www.canting.cc
3 发表于 2007-12-05 18:17 ·  中国 广东 广州 天河区 电信
初级用户
积分 36
发帖 15
注册 2007-11-23 17:11
18年会员
UID 103536
性别 男
状态 离线
谢谢,回去学习!
4 发表于 2007-12-05 18:50 ·  中国 广东 广州 天河区 电信
初级用户
积分 36
发帖 15
注册 2007-11-23 17:11
18年会员
UID 103536
性别 男
状态 离线
Originally posted by uemuem at 2007-12-5 04:26 PM:
for /f "delims=/" %%i in ('dir /b/s *.*') do dir /b/s *.rar | find "%%i" || del "%%i"


[ Last edited by uemuem on 2007-12-5 at 04:35 PM ]


我发现此方法虽然可行,但效率比较低!
因为dir命令在屏幕上显示内容会花时间,从dir命令输出的字符串来截取进行操作也是比较慢。

我曾经用的方法是为该目录下的所有文件去除隐藏属性
attrib +H *.* /S
然后再把rar文件增加隐藏属性
attrib -H *.rar /S
最后删掉带有隐藏属性的文件就可以了。
速度自然是快很多,特别是该目录下有很多rar文件,且不一定在根目录的时候,效率高不少。

但就想知道除了这个方法外,还有没有其它的方法能比较快速的解决这个问题的?
5 发表于 2007-12-05 18:52 ·  中国 上海 联通
初级用户
★★
积分 153
发帖 68
注册 2006-10-12 22:25
19年会员
UID 65507
来自 上海
状态 离线
Originally posted by lvjing79 at 2007-12-5 18:50:


我发现此方法虽然可行,但效率比较低!
因为dir命令在屏幕上显示内容会花时间,从dir命令输出的字符串来截取进行操作也是比较慢。

我曾经用 ...


这是个好主意,不过文件量大的话估计效率也不会太高吧,不太具通用性。

[ Last edited by uemuem on 2007-12-5 at 07:13 PM ]
个人主页-找餐厅:http://www.canting.cc
6 发表于 2007-12-05 19:27 ·  中国 广东 广州 天河区 电信
初级用户
积分 36
发帖 15
注册 2007-11-23 17:11
18年会员
UID 103536
性别 男
状态 离线
这也是我想请教还有没有更好的方法的原因。
7 发表于 2007-12-05 19:30 ·  中国 广东 广州 天河区 电信
初级用户
积分 36
发帖 15
注册 2007-11-23 17:11
18年会员
UID 103536
性别 男
状态 离线
Originally posted by uemuem at 2007-12-5 04:26 PM:

@echo off
for /f "delims=/" %%i in ('dir /b/s *.*') do dir /b/s *.rar | find "%%i" || del "%%i"


[ Last edited by uemuem on 2007-12-5 at 06:53 PM ]


另外我想请教,delims=/ 是指分隔符是'/'吧?那'dir /b/s *.*' 出来的结果里面有'/'这个符号吗?好像都是'\'吧?
8 发表于 2007-12-05 19:53 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
分割符/是不显示,只显示/前面的内容
9 发表于 2007-12-05 20:26 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,436
发帖 739
注册 2007-10-11 17:44
18年会员
UID 99469
性别 男
状态 离线
@echo off
for /f "delims=" %%i in ('dir /a/b/s *.*') do if /i not "%%~xi"==".rar" del /a/q"%%i"
10 发表于 2007-12-06 10:39 ·  中国 广东 广州 天河区 电信
初级用户
积分 36
发帖 15
注册 2007-11-23 17:11
18年会员
UID 103536
性别 男
状态 离线
Originally posted by abcd at 2007-12-5 08:26 PM:
@echo off
for /f "delims=" %%i in ('dir /a/b/s *.*') do if /i not "%%~xi"==".rar" del /a/q"%%i"


嗯,看来不错,回去试验一下,多谢!
11 发表于 2007-12-08 10:02 ·  中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109
发帖 52
注册 2006-01-03 22:47
20年会员
UID 48392
状态 离线
生成一个文件夹,把rar文件拷入,然后把剩下来的文件全部删除,再把rar文件拷出来,把刚才生成的文件夹删除,这样子不就行了。
12 发表于 2007-12-08 14:34 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
不用 find 用IF怎么样
简单!简单!再简单!
13 发表于 2007-12-08 16:10 ·  中国 广东 茂名 电信
中级用户
★★
积分 261
发帖 123
注册 2006-06-06 19:23
20年会员
UID 56648
状态 离线
Originally posted by dooomer at 2007-12-8 10:02:
生成一个文件夹,把rar文件拷入,然后把剩下来的文件全部删除,再把rar文件拷出来,把刚才生成的文件夹删除,这样子不就行了。


这个最实际,应该说 移入和移出,拷字应该是复制
14 发表于 2007-12-08 16:28 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@echo off
for /r %%i in (*.*) do (
if not "%%i"==%0 if not "%%~xi"==".rar" del /a/f/q "%%i"
)
pause
简单!简单!再简单!
15 发表于 2007-12-10 23:01 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线

::只删除 d:\test目录下非rar文件,不包括子目录
WMIC DATAFILE WHERE "Drive='d:' AND Extension<>'rar' and path='\\test\\'" call delete
论坛跳转: