![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-25 23:17 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 删除D盘下文件夹名为数字(0-999999)下的影音文件 |
| 可打印版本 5,923 / 28 |
| 第16楼 tide2046 | 发表于 2006-09-28 21:41 |
| 新手上路 发帖 7 积分 18 | |
|
那我想在删除前把这些文件备份,包括目录结构,和里面所有的文件
也就是说 比如 删除D:/music/123/*.rm 就把123文件夹里所有的文件 和 目录结构一起备份 如果能把music文件夹整个备份当然更好 请兄赐教啊 |
|
| 第17楼 NaturalJ0 | 发表于 2006-09-28 21:48 |
| 银牌会员 发帖 533 积分 1,181 | |
|
备份就用鼠标吧
|
|
| 第18楼 pengfei | 发表于 2006-09-28 22:52 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by tide2046 at 2006-9-28 21:41: 楼上说的对, 你备份就在Windows 下吧, 用cmd会很麻烦, 昨天整了一个晚上, 挺累的, 休息去了. |
|
| 第19楼 namejm | 发表于 2006-09-28 22:53 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by pengfei at 2006-9-28 07:02: 通过截取字符来判断的方法确实不错,比 echo|findstr 效率高多了,赞一个先。 下一步可以考虑路径带空格的问题,呵呵。 |
|
| 第20楼 pengfei | 发表于 2006-09-28 23:03 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by namejm at 2006-9-28 22:53: 呵呵~ 我写批处理的很多思路来自C语言中的算法... 15, 16楼的代码已经可以处理带空格路径的文件夹了. [ Last edited by pengfei on 2006-9-28 at 23:06 ] |
|
| 第21楼 3742668 | 发表于 2006-09-29 01:49 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Part 1:
Part 2:
|
|
| 第22楼 pengfei | 发表于 2006-09-30 10:01 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
3742668版主对语句和参数的使用好强, 代码简洁高效, 思路独到. 值得我们很好地学习...
而我对find和findstr两个命令一直有点畏惧, 它们的执行效率是比较低的, 尤其处理的数据量大的时候速度比较慢. 这一点我是经过大量测试得出来的. 版主对findstr提的两点建议很有道理, 特别是第二点思路很好. 另外版主的代码好像都只考虑目录数最多为两个(不知道是不是我看错了), 如果目录数更多就需要改写. 我还是觉得把需要操作的根目录下的所有目录列出来判断是否全为数字要好, 而用正则表达式判断是否全为数字也会影响速度. 用版主的这一段就很好, 所以我还是坚持不使用findstr: :IsNumber set "strNum=%~1%~2" for /l %%i in (0,1,9) do set "strNum=!strNum:%%i=!" if "%strNum%" == "" echo 全数字! goto :eof 感谢3742668的精彩点评, 学习了~~~! [ Last edited by pengfei on 2006-9-30 at 10:06 ] |
|
| 第23楼 kmlxk | 发表于 2006-09-30 11:13 |
| 初级用户 发帖 17 积分 45 | |
|
仰视一下~~强人啊
|
|
| 第24楼 3742668 | 发表于 2006-09-30 12:52 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Re pengfei:
1.关于用findstr效率低的问题。 同样是用findstr,但是循环内和循环外使用的效率截然不同。你所说的效率低,是因为你把它放在循环内使用,执行的次数多了,当然效率就低了。如果放在循环外面执行,可以大胆地说,绝对比你写代码自己完成相应功能要快得多。 2.关于只能处理两层目录的问题。 提示一下:for %%? in (!strDir!) do strTmp=%%? !strTmp!执行后,如果路径为c:\111\222\333\444,则strTmp的内容会是:"444" "333" "222" "111" c:" |
|
| 第25楼 pengfei | 发表于 2006-10-01 03:44 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by 3742668 at 2006-9-29 01:49: 这段代码效率非常高, 比13楼和14楼代码的执行效率高许多, 比15楼的代码也要快. 3742668版主能解释一下 findstr /rc:".*\\*\\*$" 这一句的含意吗? 这一段代码的大概意思是不是列出当前目录下所有的子目录, 判断最底层目录是否全为数字, 如果是将删除文件夹下的所有影音文件? 如果是这样就不符合楼主提出的. d:\music\1234\1345 (当前目录为d盘), 只要目录名不为数字这样的文件夹下的文件都不能删. 所以还是列出当前目录下所有的文件夹名, 判断其是否全为数字, 如果路径中出现非数字就不执行删除操作要安全一些. [ Last edited by pengfei on 2006-10-1 at 03:55 ] |
|
| 第26楼 3742668 | 发表于 2006-10-01 12:24 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Re pengfei:
1.findstr /rc:".*\\*\\*$"表示搜索字符串的内容为:++++,在findstr的搜索字符中,遇到特殊字符需要用\来转义,例如\就应该写成:\\ 2.这段代码的作用是,如果当前目录下的子目录中,最后两层目录为全数字组成的话,则删除最底层目录下所有的影音文件。 3.很显然,你和我对于楼主(这个可耻的家伙,咱为他争得脸红脖子粗,他给咱玩失踪,呵呵)的意图理解并不一样。 你的理解为:最低两层全数字,且父目录中也是全数字(拗口,也就是当前目录下的每层子目录都全数字)。 而我的理解为:最低两层全数字,父目录不管。 不过,不管楼主的意图是什么,都不重要。但是,对于你所说的"所以还是列出当前目录下所有的文件夹名, 判断其是否全为数字,",个人觉得不是很必要: 1.findstr部分: 2.非findstr部分: 纸上又谈了半天兵,闪人睡觉去也。 |
|
| 第27楼 pengfei | 发表于 2006-10-02 20:09 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by tide2046 at 2006-9-28 05:34: 呵呵~ 楼主潜水这么久也不冒个泡. 我对他上面给出的提示的理解是, D盘根目录下的music文件夹下的文件不能删, 而music目录下又出现了数字命名的文件夹. 这样3742668版主从最底层目录匹配纯数字是危险的, music目录下的123文件夹符合条件, 而提示是这样的目录下的文件不能删. 所以我认为从当前根目录开始匹配最为安全, 并且楼主提到只能是父目录为数字以及子目录同样为数字的文件夹里的影音文件才可以删. 3742668版主提示的还需要对空格进行过滤, 这个很重要. 我在想为什么你的代码执行这么快, 有点纳闷了, 而13楼namejm版主的代码和14楼的代码为同样的正则表达式却慢很多. (虽然findstr在FOR循环中, 但我认为不是这个原因) 21楼的findstr是dir /s 后接一个管道命令连接, 而13,14楼的代码是先dir /s 后进行处理再echo后接一个管道命令. 难道是这个原因??? |
|
| 第28楼 pengfei | 发表于 2006-10-02 20:10 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
CLS
[ Last edited by pengfei on 2006-10-2 at 20:22 ] |
|
| 第29楼 iPoint | 发表于 2010-01-18 16:25 |
| 初级用户 发帖 26 积分 22 | |
Originally posted by 3742668 at 2006-10-1 12:24: 3742668這個版主還在嗎。。好仰慕。。收藏寶貼 |
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |