中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 17:25
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 删除D盘下文件夹名为数字(0-999999)下的影音文件
楼 主 删除D盘下文件夹名为数字(0-999999)下的影音文件 发表于 2006-09-26 22:52 ·  中国 广东 广州 天河区 电信
新手上路
积分 18
发帖 7
注册 2006-09-26 22:39
UID 63739
状态 离线
想写个批处理,要删除多个文件夹(文件夹名是0-99999,中间并不是连续的,有缺省的可能)下所有的影音文件。请高手解答,谢谢了
2 发表于 2006-09-26 23:43 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
为什么不直接把上一级目录删了
3 发表于 2006-09-26 23:54 ·  中国 广东 广州 天河区 电信
新手上路
积分 18
发帖 7
注册 2006-09-26 22:39
UID 63739
状态 离线
目录中还有别的文件
象网页文件等等的。。。
要求只是删除影音文件

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

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

跪求高手解答
4 发表于 2006-09-27 00:05 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
最简单的方法:
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 发表于 2006-09-27 01:30 ·  中国 广东 广州 天河区 电信
新手上路
积分 18
发帖 7
注册 2006-09-26 22:39
UID 63739
状态 离线
这个有点问题,如果文件夹名为0起头,比如0123 ,这样的文件夹里的文件就删除不掉了
6 发表于 2006-09-27 02:01 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
你把文件夹名的规律介绍一下!
7 发表于 2006-09-27 02:36 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
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 发表于 2006-09-27 02:36 ·  中国 广东 广州 天河区 电信
新手上路
积分 18
发帖 7
注册 2006-09-26 22:39
UID 63739
状态 离线
就是只包含数字 没有任何其他字符 也没有空格

数字的组合方式不限 可以是 0 也可以是654 也可以是 0654 等等 0的位置不限
9 发表于 2006-09-28 04:45 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  试试下面的代码,可能会有用(代码为演示性质,如果觉得可靠,把后一个 echo %%i 改为 del /q %%i 即可):

@echo off
for /f %%i in ('dir /ad /b') do (
echo %%i| findstr "^*$">nul && echo %%i
)
pause
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
10 发表于 2006-09-28 05:34 ·  中国 广东 广州 电信
新手上路
积分 18
发帖 7
注册 2006-09-26 22:39
UID 63739
状态 离线
昨天有人给我一个程序段,和这个差不多

但是,有点问题

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

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

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

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


期待高手赐教
11 发表于 2006-09-28 05:36 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
Originally posted by namejm at 2006-9-28 04:45:
  试试下面的代码,可能会有用(代码为演示性质,如果觉得可靠,把后一个 echo %%i 改为 del /q %%i 即可):

@echo off
for /f %%i in ('dir /ad /b') do (
...


兄一个正则表达式用得妙, 楼主的文件夹没有规律可循(说到规律就只有先去零后比对,不可取). 而正则表达式匹配以0-9命名的文件夹, 成功解决了这个难题.
12 发表于 2006-09-28 05:58 ·  中国 广东 广州 电信
新手上路
积分 18
发帖 7
注册 2006-09-26 22:39
UID 63739
状态 离线
pengfei老兄,你上面给的程序能解决我这个新的要求

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

但是,有点问题

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

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





但是执行效率太低啊,尤其是数据大的时候
13 发表于 2006-09-28 07:00 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  经过楼主的测试,下面的代码可以实现『第 10 楼』的意图,速度还不错(暂时没有考虑路径带空格的情况):

@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /ad /b /s') do (
set route=%%i
set route_=!route:%cd%=!
set route_=!route_:\=!
echo !route_!|findstr "^*$">nul && (
for %%j in (avi wmv mpg mpeg rm rmvb mov divx mp3 wav wma swf) do (
if exist %%i\*.%%j del /a /f %%i\*.%%j
)
)
)
pause


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

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

[ Last edited by namejm on 2006-9-28 at 11:55 ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
14 发表于 2006-09-28 07:01 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
at 2006-9-28 05:34:

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

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

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

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



终于解决群主说的这个难题了, 但是速度依然很慢! 请先去掉删除测试... 刚刚发完贴发现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 发表于 2006-09-28 07:02 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
在14楼代码的基础上修改, 完全抛开了13楼与14楼中的正则表达式用法. 因此速度得到大幅度提升, 另外一个优点是可以匹配非纯数字目录(慎用!). 经过测试执行相同的任务, 14楼需要大约28秒, 而本段代码大约只需要9秒.

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


@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!:
set "route_=!route_:%root%=!"
set "route_=!route_:\=!"
call :go
)
echo 代码执行完毕^^!
pause

:go
set num=!route_:~0,1!
if not "!num!"==":" (
set term=
for %%a in (0 1 2 3 4 5 6 7 8 9) do (
if "!num!"=="%%a" (
set route_=!route_:~1!
set term=
goto go
)
)
if "!term!"=="" goto :eof
goto go
)
::__更多的影音类型请在下面FOR语句中按当前格式添加.
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


给楼主提个小建议, 把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 ]
论坛跳转: