中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 21:46
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教大家一个批处理的问题 查看 1,793 回复 15
楼 主 请教大家一个批处理的问题 发表于 2007-03-22 05:53 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
19年会员
UID 67562
性别 男
状态 离线
请问有没有一个批处理能实现删除一个目录中的除开指定一类文件外(如*.mp3)的其它所有的文件,以及子文件夹.包括隐藏的和只读的等...
2 发表于 2007-03-22 06:13 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
有这样的批处理,不过要考虑好要达到的要求,然后再写代码。
因为这个包括的可能情况太多了
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-03-22 06:22 ·  中国 江苏 苏州 联通
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
19年会员
UID 60484
状态 离线
把你要的文件先移出这目录,再彻底灭了它,最后重建目录,把文件移回去。
这样处理似乎简单点,可以少动些脑筋。
4 发表于 2007-03-22 08:28 ·  中国 福建 福州 连江县 电信
中级用户
★★
积分 356
发帖 115
注册 2004-07-27 00:00
22年会员
UID 29114
性别 男
状态 离线
for /f "tokens=* delims=" %%i in ('dir /a-d /b /s c:\test\') do (
if not %%~xi==.mp3 del "%%i" /f /a /q)
For /f "tokens=* delims=" %%i in ('dir /ad/b/s c:\test\ ^|sort /r') DO (
attrib -h -s -r "%%i"
rd /q "%%i")

[ Last edited by balinger on 2007-3-22 at 08:34 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
zzhh612 +1 2007-03-22 11:43
5 发表于 2007-03-22 09:36 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
请自行测试

@echo off
attrib -h -s -r /s /d c:\test\*.*
for /f "delims=" %%i in ('dir /a-d /b /s c:\test\^|find /v ".mp3" 2^>nul') do (
del /q "%%i" 2>nul
rd /q "%%~dpi" 2>nul
)
pause


[ Last edited by zh159 on 2007-3-21 at 11:25 PM ]
6 发表于 2007-03-22 09:41 ·  中国 江苏 苏州 电信
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
我现在对FOR还是一无所知,但是我认为可以多写点代码

cd \你要进入的目录
copy *.你要的后缀名 (也可以用xcopy)
cd..
deltree 你不要的那个目录

这样应该也是一种方法吧。我不会FOR,所以只能这么想了。
7 发表于 2007-03-22 09:53 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
rd /q 可以直接去处文件夹
8 发表于 2007-03-22 09:56 ·  中国 江苏 苏州 电信
中级用户
★★
我是DOS学者
积分 367
发帖 180
注册 2006-05-14 10:53
20年会员
UID 55507
性别 男
来自 重庆
状态 离线
Originally posted by zh159 at 09:53:
rd /q 可以直接去处文件夹


rd不是只能删除空目录吗? 这里因该不好用吧。
9 发表于 2007-03-22 10:25 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
错了,应该是rd /s /q

rd/?

[ Last edited by zh159 on 2007-3-21 at 09:28 PM ]
10 四楼的balinger,谢谢你的答复 发表于 2007-03-22 10:44 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
19年会员
UID 67562
性别 男
状态 离线
我试用了一下你给出的代码,基本上满足了我的意思,只是我还得把文件移到根目录文件夹中,再删除余下的空文件夹.这个功能也可以加入到其中吗?(就是把指定留下的文件移到第一个文件夹中,不留下子文件夹)...谢了,很佩服你.
11 也感谢五楼zh159的答复.... 发表于 2007-03-22 10:48 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
19年会员
UID 67562
性别 男
状态 离线
我试用了你给的代码,有一个BUG,就是没有能处理我的隐藏文件和文件夹.不过仍就谢了.愿共同学习.
12 发表于 2007-03-22 11:47 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
attrib -h -s -r /s /d
这句话就可以把当前目录下所有的文件以及子文件夹、子文件夹内的的所有文件都去处“隐藏、系统、只读”属性

attrib -h -s -r /s /d c:\test\

[ Last edited by zh159 on 2007-3-21 at 10:49 PM ]
13 回12楼 发表于 2007-03-22 11:52 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
19年会员
UID 67562
性别 男
状态 离线
我也知道你的意思,但我经过运行,确不能处理掉隐藏文件和文件夹.代码是我直接复制到文本后,再改成.BAT的.我也在找这个问题.
好像你的批处理只能放在第一个目录下才能运行正常.若修改成
attrib -h -s -r /s /d c:\test 后反而在目录下也运行不正常了.

[ Last edited by zzhh612 on 2007-3-22 at 12:03 PM ]
14 发表于 2007-03-22 12:06 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
attrib -h -s -r /s /d c:\test\*


rd /s /q是直接删除目录+里面的文件,如有mp3文件也一样删除,所以用rd /q

[ Last edited by zh159 on 2007-3-21 at 11:09 PM ]
15 回zh159 发表于 2007-03-22 12:21 ·  中国 四川 遂宁 电信
中级用户
★★
积分 278
发帖 103
注册 2006-10-21 21:08
19年会员
UID 67562
性别 男
状态 离线
搞定了,要将第一句改为attrib -h -s -r /s /d c:\test\*.*

效果与balinger的代码一样.

谢谢.我也有所长劲了...

[ Last edited by zzhh612 on 2007-3-22 at 12:24 PM ]
论坛跳转: