中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-25 22:45
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS批处理 & 脚本技术(批处理室) » 删除D盘下文件夹名为数字(0-999999)下的影音文件
可打印版本  5,920 / 28
第1楼 tide2046 发表于 2006-09-26 22:52
新手上路 发帖 7 积分 18
删除D盘下文件夹名为数字(0-999999)下的影音文件
想写个批处理,要删除多个文件夹(文件夹名是0-99999,中间并不是连续的,有缺省的可能)下所有的影音文件。请高手解答,谢谢了
第2楼 NaturalJ0 发表于 2006-09-26 23:43
银牌会员 发帖 533 积分 1,181
为什么不直接把上一级目录删了
第3楼 tide2046 发表于 2006-09-26 23:54
新手上路 发帖 7 积分 18
目录中还有别的文件
象网页文件等等的。。。
要求只是删除影音文件

目前删除影音文件已经解决

但是不知道如何判断文件夹。。。

跪求高手解答
第4楼 pengfei 发表于 2006-09-27 00:05
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
最简单的方法:
del /s /a /q *.avi

判断文件夹是否存在, 再执行删除该文件夹下影音文件的代码:
@echo off
for /l %%i in (0,1,9999) do (
if exist %%i (
del /s /a /q %%i\*.avi
)
)
pause
第5楼 tide2046 发表于 2006-09-27 01:30
新手上路 发帖 7 积分 18
这个有点问题,如果文件夹名为0起头,比如0123 ,这样的文件夹里的文件就删除不掉了
第6楼 pengfei 发表于 2006-09-27 02:01
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
你把文件夹名的规律介绍一下!
第7楼 NaturalJ0 发表于 2006-09-27 02:36
银牌会员 发帖 533 积分 1,181
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in ('dir/ad/b') do (
set /a varnum=%%i
if not !varnum!==0 (
del /q %%i\*.avi
del /q %%i\*.wmv
del /q %%i\*.mpg
del /q %%i\*.mpeg
del /q %%i\*.rm
del /q %%i\*.rmvb
del /q %%i\*.mov
del /q %%i\*.divx
rem 要是还不够自己再加些
)
)
0 00 000 0000 00000 000000 ...这些目录没处理,不过大概你也没有这些目录吧,猜的 ^_^

[ Last edited by NaturalJ0 on 2006-9-27 at 02:45 ]
第8楼 tide2046 发表于 2006-09-27 02:36
新手上路 发帖 7 积分 18
就是只包含数字 没有任何其他字符 也没有空格

数字的组合方式不限 可以是 0 也可以是654 也可以是 0654 等等 0的位置不限
第9楼 namejm 发表于 2006-09-28 04:45
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  试试下面的代码,可能会有用(代码为演示性质,如果觉得可靠,把后一个 echo %%i 改为 del /q %%i 即可):
第10楼 tide2046 发表于 2006-09-28 05:34
新手上路 发帖 7 积分 18
昨天有人给我一个程序段,和这个差不多

但是,有点问题

这个会删除某个盘符下所有的数字命名的文件夹里的影音文件

现在上司给的指示是:只能是父目录为数字的文件夹里的影音文件和其子目录名同样为数字的文件夹里的影音文件才可以删

即:比如 D:/music/123/*.rm 这样的不能删

而:D:3213/321/*.rm 这样的需要删除


期待高手赐教
第11楼 pengfei 发表于 2006-09-28 05:36
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
Originally posted by namejm at 2006-9-28 04:45:
  试试下面的代码,可能会有用(代码为演示性质,如果觉得可靠,把后一个 echo %%i 改为 del /q %%i 即可):
第12楼 tide2046 发表于 2006-09-28 05:58
新手上路 发帖 7 积分 18
pengfei老兄,你上面给的程序能解决我这个新的要求

Originally posted by tide2046 at 2006-9-28 05:34:
昨天有人给我一个程序段,和这个差不多

但是,有点问题

这个会删除某个盘符下所有的数字命名的文件夹里的影音文件

现在上司给的指示是: ...





但是执行效率太低啊,尤其是数据大的时候
第13楼 namejm 发表于 2006-09-28 07:00
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  经过楼主的测试,下面的代码可以实现『第 10 楼』的意图,速度还不错(暂时没有考虑路径带空格的情况):


  居然把"路径"这个词语的英文写成 root,修改一下下,汗~~~

  和 pengfei 讨论了一下,发现可以不用 pushd 和 popd,但是就不能把 del 语句换成 echo 语句来测试了。删除有风险,删除之前请先做好备份。

[ Last edited by namejm on 2006-9-28 at 11:55 ]
第14楼 pengfei 发表于 2006-09-28 07:01
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底



终于解决群主说的这个难题了, 但是速度依然很慢! 请先去掉删除测试... 刚刚发完贴发现namijm兄已经写好了, 并且思路也差不多!

@echo off
::__删除当前目录下以纯数字命名的所有子目录中的指定文件.
::__测试前请将del /a /q "!route!\*.%%c" 1>nul 2>nul这一句去掉, 如果可行再执行删除!
set root=%cd%
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /ad /b /s') do (
set route=%%i
set "route_=!route:%root%=!"
set "route_=!route_:\=!"
echo !route_!|findstr "^*$" 1>nul 2>nul && call :go
)
echo 代码执行完毕^^!
pause


::__更多的影音类型请在下面FOR语句中按当前格式添加.
:go
for %%c in (avi mp3 rm rmvb mp4 wmv wav swf) do (
if exist "!route!\*.%%c" (
echo 待操作的文件夹__!route!
del /a /q "!route!\*.%%c" 1>nul 2>nul
)
)
goto :eof

[ Last edited by pengfei on 2006-9-28 at 20:35 ]
第15楼 pengfei 发表于 2006-09-28 07:02
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
在14楼代码的基础上修改, 完全抛开了13楼与14楼中的正则表达式用法. 因此速度得到大幅度提升, 另外一个优点是可以匹配非纯数字目录(慎用!). 经过测试执行相同的任务, 14楼需要大约28秒, 而本段代码大约只需要9秒.

经过反复测试, 完全正常, 可以在任意目录下执行, 不存在目录名中有空格不能执行的问题. 为了安全起见请先去掉del /a /q "!route!\*.%%c" 1>nul 2>nul这一句进行测试~~~!



给楼主提个小建议, 把del /a /q "!route!\*.%%c" 1>nul 2>nul 改成 echo 待操作的文件夹__!route!>>file.txt

这样打开file.txt, 需要执行删除的文件夹就一目了然. 请在确认安全后再改成del.

[ Last edited by pengfei on 2006-9-28 at 23:05 ]
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023