中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 删除D盘下文件夹名为数字(0-999999)下的影音文件
« [1] [2] »
作者:
标题: 删除D盘下文件夹名为数字(0-999999)下的影音文件 上一主题 | 下一主题
tide2046
新手上路





积分 18
发帖 7
注册 2006-9-26
状态 离线
『楼 主』:  删除D盘下文件夹名为数字(0-999999)下的影音文件

想写个批处理,要删除多个文件夹(文件夹名是0-99999,中间并不是连续的,有缺省的可能)下所有的影音文件。请高手解答,谢谢了

2006-9-26 22:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

为什么不直接把上一级目录删了

2006-9-26 23:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tide2046
新手上路





积分 18
发帖 7
注册 2006-9-26
状态 离线
『第 3 楼』:  

目录中还有别的文件
象网页文件等等的。。。
要求只是删除影音文件

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

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

跪求高手解答

2006-9-26 23:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 4 楼』:  

最简单的方法:
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

2006-9-27 00:05
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
tide2046
新手上路





积分 18
发帖 7
注册 2006-9-26
状态 离线
『第 5 楼』:  

这个有点问题,如果文件夹名为0起头,比如0123 ,这样的文件夹里的文件就删除不掉了

2006-9-27 01:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 6 楼』:  

你把文件夹名的规律介绍一下!

2006-9-27 02:01
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 7 楼』:  

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 ]

2006-9-27 02:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tide2046
新手上路





积分 18
发帖 7
注册 2006-9-26
状态 离线
『第 8 楼』:  

就是只包含数字    没有任何其他字符  也没有空格   

数字的组合方式不限   可以是  0  也可以是654   也可以是  0654   等等   0的位置不限

2006-9-27 02:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  试试下面的代码,可能会有用(代码为演示性质,如果觉得可靠,把后一个 echo %%i 改为 del /q %%i  即可):
@echo off
for /f %%i in ('dir /ad /b') do (
    echo %%i| findstr "^[0-9]*$">nul && echo %%i
)
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-28 04:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tide2046
新手上路





积分 18
发帖 7
注册 2006-9-26
状态 离线
『第 10 楼』:  

昨天有人给我一个程序段,和这个差不多

但是,有点问题

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

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

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

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


期待高手赐教

2006-9-28 05:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by namejm at 2006-9-28 04:45:
  试试下面的代码,可能会有用(代码为演示性质,如果觉得可靠,把后一个 echo %%i 改为 del /q %%i  即可):
[code]
@echo off
for /f %%i in ('dir /ad /b') do (
...

兄一个正则表达式用得妙, 楼主的文件夹没有规律可循(说到规律就只有先去零后比对,不可取). 而正则表达式匹配以0-9命名的文件夹, 成功解决了这个难题.

2006-9-28 05:36
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
tide2046
新手上路





积分 18
发帖 7
注册 2006-9-26
状态 离线
『第 12 楼』:  

pengfei老兄,你上面给的程序能解决我这个新的要求

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

但是,有点问题

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

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

但是执行效率太低啊,尤其是数据大的时候

2006-9-28 05:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 13 楼』:  

  经过楼主的测试,下面的代码可以实现『第 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 "^[0-9]*$">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没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-28 07:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 14 楼』:  


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 "^[0-9]*$" 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 ]

2006-9-28 07:01
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 15 楼』:  

在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 ]

2006-9-28 07:02
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: