![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 15:53 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 一起帮忙用批处理帮MP3找出未配歌词 |
| 可打印版本 3,144 / 13 |
| 第1楼 junyee | 发表于 2006-10-01 21:17 |
| 中级用户 发帖 112 积分 253 | |
|
一起帮忙用批处理帮MP3找出未配歌词 现在的很多MP3都能显示歌词了,要正常显示的话,歌词文件(*.lrc)必须与歌曲文件(*.mp3)同名,且在同一个目录内。!!!
而我们往往很难发现歌词是否有对应的歌词文件,于是我参考以前发的类似贴做了个批处理,尽管有很多不足之处.^^恳请众位前辈不吝赐教。 假设MP3对应的盘符为G:\ G:\Music是专门存放歌曲的目录,因为现在不少MP3都能读取数层目录,所以把不同类的歌分在不同的目录里面,在使用的时候能够更加顺手。 假设G:\Music下又有两个目录 G:\Music\01 G:\Music\02 批处理如下。 @echo off del G:\list.txt>nul 2>nul echo ---G:Music\01 >G:\list.txt cd /d G:\music\01 for %%i in (*.mp3 *.wma) do (if not exist %%~ni.lrc echo %%~ni>>G:\list.txt) echo ---G:Music\02 >>G:\list.txt cd /d G:\Music\02 for %%i in (*.mp3 *.wma) do (if not exist %%~ni.lrc echo %%~ni>>G:\list.txt) notepad G:\list.txt exit 经试验能用。我是新手,这种很简单的操作却写出了这么一大堆代码,老觉得别扭,希望大家帮我把这段简化一下,如果有问题,也恳请大家提出来啊~~~ [ Last edited by junyee on 2006-10-1 at 22:49 ] |
|
| 第2楼 pengfei | 发表于 2006-10-01 21:45 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
@echo off
echo _____________________G:Music\01 >G:\list.txt cd /d G:\music\01 for %%i in (*.mp3 *.wma) do if not exist %%~ni.lrc echo %%~ni>>G:\list.txt echo _____________________G:Music\02 >>G:\list.txt cd /d G:\Music\02 for %%i in (*.mp3 *.wma) do if not exist %%~ni.lrc echo %%~ni>>G:\list.txt start G:\list.txt exit 楼主的代码写得不错吗!!! 我去掉del因为下面echo ---G:Music\01 >G:\list.txt这一句会刷新内容. (只要文件属性不是只读!) 两个for语句处属于for与if两个复合语句的嵌套, 不用括号也可以. notepad G:\list.txt这一句改成start G:\list.txt是因为DOS下的打开应用程序, 因为后缀都是关联好了的, 系统会自动调用记事本来打开它 . [ Last edited by pengfei on 2006-10-1 at 23:18 ] |
|
| 第3楼 namejm | 发表于 2006-10-01 22:03 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
其实你的代码已经够简洁了,能修改的就只是对一些代码进行一些优化而已,特别是 notepad G:\list.txt 这一句有点问题,一旦你使用了这一句,那么,只有等G:\list.txt被关闭之后,批处理窗口才会退出,并且,末尾的exit语句可以不用。修改你的代码如下:
刚发完,却发现pengfei已经在2楼给出了代码,呵呵,手脚够快的呀。 不过去掉del语句不太妥当,因为不知道G:\list.txt 是何属性,万一是只读属性呢,echo重定向到G:\list.txt 就会无法写入!所以我这段代码仍然保留了del语句,并且加了 /a /f 参数来强制删除,并加了静默参数 /q;又考虑到可能不存在G:\list.txt ,所以又用 2>nul 来屏蔽错误信息在屏幕上的显示。 [ Last edited by namejm on 2006-10-1 at 22:09 ] |
|
| 第4楼 junyee | 发表于 2006-10-01 22:35 |
| 中级用户 发帖 112 积分 253 | |
|
kc唉,,我还老觉得不够简洁呢。。
不过。可不可以用什么方法把上面语名再精减一下呢?因为 echo ---G:Music\01 >>G:\list.txt cd /d G:\music\01 for %%i in (*.mp3 *.wma) do if not exist %%~ni.lrc echo %%~ni>>G:\list.txt echo ---G:Music\02 >>G:\list.txt cd /d G:\Music\02 for %%i in (*.mp3 *.wma) do if not exist %%~ni.lrc echo %%~ni>>G:\list.txt 做的是重复动作只是目录名不同而已,如果在G:\music下有很多文件夹的话,岂不是更长了? |
|
| 第5楼 namejm | 发表于 2006-10-01 23:03 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
可以试试下面的代码(暂时没有考虑到各种可能的错误,比如mp3格式的和wma格式的文件同名的问题):
|
|
| 第6楼 zh159 | 发表于 2006-10-01 23:30 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
当前目录下所有文件夹都可以
注:文件夹不能有空格、敏感字符 如果想区分mp3格式的和wma格式,改为“>>list.txt echo %1\%%i” |
|
| 第7楼 NaturalJ0 | 发表于 2006-10-01 23:54 |
| 银牌会员 发帖 533 积分 1,181 | |
|
我也试试 [ Last edited by NaturalJ0 on 2006-10-2 at 00:01 ] |
|
| 第8楼 pengfei | 发表于 2006-10-02 00:21 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
大家写的都不错啊, 我也贴一段. 遍历当前目录下的每一个目录. 列出没有歌词的歌曲名, 同时注明所在目录. 对于路径中存在空格的问题应该可以处理. 也会搜索当前目录, 如果没有文件会提示找不到文件...
namejm版主说的只读文件, 将不能写入. 这一点很重要, 所在还是选择DEL. 如果同一目录出现两种格式文件的同名, 这一点不能做任何处理, 因为lrc只能有一个, 所以还得重命名另一种格式的文件. 更多的音乐类型请在第二个for语句中按当前格式添加. [ Last edited by pengfei on 2006-10-2 at 05:34 ] |
|
| 第9楼 pengfei | 发表于 2006-10-02 02:09 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
发现5楼namejm兄的代码, 原来不用dir也可以列出目录的匹配文件. 呵呵~ 学习了...
下面的代码和8楼实现一样的功能, 一个for来完成. 速度还可以! [ Last edited by pengfei on 2006-10-2 at 05:34 ] |
|
| 第10楼 无奈何 | 发表于 2006-10-02 05:18 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
命令行简单显示版:
严格格式排版版: |
|
| 第11楼 pengfei | 发表于 2006-10-02 08:27 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
:sub 发现%%i 重新赋予%1居然还可以使用for的变量扩充..... |
|
| 第12楼 vkill | 发表于 2006-10-03 08:01 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
要是可以弄到像芊芊静听那样自动下载歌词就好了
|
|
| 第13楼 yayumyself | 发表于 2007-06-21 17:35 |
| 初级用户 发帖 14 积分 36 | |
|
比我想简洁的多!
|
|
| 第14楼 yayumyself | 发表于 2007-06-21 18:21 |
| 初级用户 发帖 14 积分 36 | |
|
这个是检测有没有歌词没有对应的音乐文件 @echo off&setlocal enabledelayedexpansion&color 1f
mode con:cols=50 lines=25 title 删除mp3上未匹配的歌词 http://hi.baidu.com/xinghuo set n=0 if "%~1"=="" ( echo 请直接拖放包含音乐的文件夹到此文件上 ping /n 6 127.0.0.1>nul&exit ) else ( echo 当前检测目录为:%~1 ) echo _________ for %%i in ("%1\*.lrc") do ( if not exist %1\%%~ni.wma ( if not exist %1\%%~ni.mp3 set/a n+=1&set name!n!=%%i&echo %%~nxi --Not Find ) ) echo. if %n%==0 echo 所有歌词都匹配&echo 程序来自: http://hi.baidu.com/xinghuo&pause>nul&exit set /p sure=是否删除这些歌词文件(Y),其他键退出: if /i "%sure%"=="y" ( cls echo 正在删除... for /l %%a in (1,1,%n%) do ( del "!name%%a!" 2>nul ) echo.&echo ^^_^^,世界清静了! echo 程序来自: http://hi.baidu.com/xinghuo ) pause>nul exit |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |