|
tide2046
新手上路
积分 18
发帖 7
注册 2006-9-26
状态 离线
|
『楼 主』:
删除D盘下文件夹名为数字(0-999999)下的影音文件
想写个批处理,要删除多个文件夹(文件夹名是0-99999,中间并不是连续的,有缺省的可能)下所有的影音文件。请高手解答,谢谢了
|
|
2006-9-26 22:52 |
|
|
NaturalJ0
银牌会员
积分 1181
发帖 533
注册 2006-8-14
状态 离线
|
|
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 |
|
|
tide2046
新手上路
积分 18
发帖 7
注册 2006-9-26
状态 离线
|
『第
5 楼』:
这个有点问题,如果文件夹名为0起头,比如0123 ,这样的文件夹里的文件就删除不掉了
|
|
2006-9-27 01:30 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
|
2006-9-27 02:01 |
|
|
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 |
|
|
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 |
|
|
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 |
|