批處理小工具自動給mp3/mp4播放器中的歌曲匹配歌詞很多人都有mp3/mp4吧,經常從電腦中拷mp3,但是要逐個的找mp3歌曲的LRC歌詞可不容易,為此我寫了個批處理腳本,運行它可以自動從電腦中找到與mp3歌曲匹配的歌詞,并且在拷貝到mp3中的同時重命名歌詞,以便于在mp3/mp4上顯示。mp3文件的命名方式有很多,比如“歌手 歌曲名”、“歌手 - 歌曲名”、“歌曲名 歌手”、“歌曲名”;mp3/mp4播放器中可能存在多個含歌曲文件的文件夾,這兩點我已經考慮了,都能正確處理。唯一不足的是當電腦中存在多個歌詞路徑時只會處理搜索到得第一個路徑中的歌詞,為此提供了手工輸入歌詞路徑的選項。以下是代碼,有興趣的朋友可以看看,歡迎提點意見比如提高效率之類的。[ 最后由 wangshuping42 于 2009-9-30 18:55]nclick="copycode($('code0'));">復制代碼
- @echo off&color 2f
- rem 這部分功能是搜索U盤中所有含mp3歌曲的文件夾,并保存在list.txt中
- call :ad&echo.&echo.&echo.
- set /p pan=默認 U 盤盤符是 I,要修改則輸入盤符,否則 直接回車:
- if not defined pan (set pan=I)
- if not exist %pan%: (
- echo.&echo.
- echo 程序沒有檢測到U盤,請插入U盤再試&pause>nul&cls&%0
- )
- echo %pan%:>list.txt
- (
- for /f usebackq delims= %%l in (`dir /ad-s/b/n/s %pan%:`) do (
- set dp=%%l
- call :if
- )
- )2>nul
- echo.&echo.&echo.
- rem 這部分主要是在D、E、F、G盤中找到歌詞所在路徑,由于可能不止一個文件夾里存在歌詞,所以提供了手工輸入方式
- :find
- set /p dd=請輸入歌詞所在路徑,或者 直接回車 由程序自動搜索路徑:
- if not defined dd (
- for %%s in (D E F G) do (
- for /f usebackq delims= %%l in (`dir /b/n/s %%s:*.lrc`) do (
- set lj=%%l
- call :lr
- )
- )
- )2>nul
- if not exist %dd%*.lrc (goto none)
- rem 這部分的功能是根據list.txt中的路徑逐個給該路徑下的mp3歌詞
- :start
- set n=0&set num=0&set ex=0
- (
- for /f usebackq delims= %%m in (`type list.txt`) do (
- for /l %%i in (1 1 1550) do (echo %%i>nul)
- set loc=%%m
- for /f usebackq delims= %%i in (`dir /b /n %%m*.mp3`) do (
- cls&call :ad
- echo.&echo.&echo程序當前工作路徑:%%m
- echo.&echo.&echo.&echo程序正在匹配文件:%%i
- set str=%%i
- call :copy
- )
- )
- ) 2>nul
- del list.txt 2>nul
- set /a no=num-ex-n
- cls&call :ad
- echo.&echo.
- echo程序共找到 %num% 首 mp3,其中 %ex% 首原來已經有歌詞
- echo.&echo.&echo.
- echo 另外 %no% 首沒有找到歌詞,程序一共匹配了 %n% 首歌詞
- pause>nul
- exit
- rem 這里是匹配歌詞的實際操作代碼,針對mp3的各種命名方式做了些處理
- :copy
- set /a num=num+1
- set lrc=%str:~0,-4%
- for /f tokens=1,2 delims=- %%n in (%lrc%) do (
- set name=%%n&set sy=%%o
- )
- if exist %loc%%lrc%.lrc (set /a ex=ex+1&goto :eof)
- (copy %dd%*%lrc%.lrc %loc%%lrc%.lrc) >nul
- if exist %loc%%lrc%.lrc set /a n=n+1&goto :eof
- (copy %dd%%name% - %sy%.lrc %loc%%lrc%.lrc) >nul
- if exist %loc%%lrc%.lrc set /a n=n+1&goto :eof
- (copy %dd%%sy% - %name%.lrc %loc%%lrc%.lrc) >nul
- if exist %loc%%lrc%.lrc set /a n=n+1&goto :eof
- goto :eof
- rem 以下是一些標簽,被上面的各部分代碼調用
- :if
- if exist %dp%*.mp3 (echo %dp%>>list.txt)
- goto :eof
- :lr
- for /f %%x in (%lj%) do (
- set dd=%%~dpx
- goto start
- )
- goto :eof
- :ad
- echo *************************************************
- echo****************************************
- echo* * **
- echo* *歌詞匹配工具 **
- echo* * **
- echo* *自動給 U 盤中的 mp3 匹配 lrc 歌詞**
- echo* * **
- echo****************************************
- echo *************************************************
- goto :eof
- :none
- echo.&echo.&echo.&echo 程序在本機或指定路徑中沒有找到 lrc 歌詞,按任意鍵退出!&pause>nul&del list.txt