作为一个音乐发烧友会经常编辑CUE文件,我以前曾经写过一个,
因为一些cue采用UTF-8编码,会用到第三方命令行程序iconv转码.
代码如下:- @echo off&setlocal enabledelayedexpansion&cls
- for /f "tokens=2" %%a in ('CHCP') do (if not "%%a"=="437" (mode con cols=80 lines=25&color 07&CHCP 437&graftabl 936))>nul
- path=%path%;g:\dos\command\第三方命令行程序
- ::=================重写CUE文件===================================
- set "artist=艺术家名" &set "album artist=专辑艺术家名" &set "album=专辑名"
- set "tracknumber=音轨号"&set "title=音轨标题"
- echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
- echo ┃ ┃
- echo ┃ · 本程序用于CUE文件制作 ┃
- echo ┃ · 选项: ┃
- echo ┃ 1 根据专辑描述文件^(xx.txt^)补充CUE缺少信息 ┃
- echo ┃ 例如: ┃
- echo ┃ 2 制作用于剪切APE的NEW_CUE ┃
- echo ┃ 例如: ┃
- echo ┃ ┃
- echo ┃ ·q 退出 ┃
- echo ┃ ·c 清屏 ┃
- echo ┃ ┃
- echo ┃ · hf-g 2009-08-06 [彭城] ┃
- echo ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
- if not "%~1"=="" (
- set "workPath=%~dp1"
- ) else (
- set /p"workPath=输入工作目录:"
- if not defined workPath set "workPath=%~dp0"
- )
- pushd "%workPath%"||echo 目录中含有特殊字符 ^^^^ ^^!
- if "%workPath:~-1%"=="\" set "workPath=!workPath:~,-1!"
- for /f "tokens=*" %%a in ("!workPath!") do set "pathname=%%~na"
- ::查找最相似的专辑描述文件(xx.txt) ①同名-②含有-③同文件夹名-④含有文件夹名-⑤唯一.txt
- if not "%~1"=="" (
- if EXIST "%~n1.txt" (set "sour_txt=%~n1.txt"&goto jmp1)
- for /f "tokens=* delims=" %%a in ('dir /a-d /b "*%~n1*.txt" 2^>nul') do (
- set "sour_txt=%%~a"
- if not "!sour_txt!"=="" goto jmp1)
- )
- ::③同文件夹名-④含有文件夹名
- if EXIST "%pathname%.txt" (set "sour_txt=%pathname%.txt"&goto jmp1)
- for /f "tokens=* delims=" %%a in ('dir /a-d /b "*!pathname!*.txt" 2^>nul') do (
- set "sour_txt=%%~a"
- if not "!sour_txt!"=="" goto jmp1)
- ::⑤唯一.txt
- for /f "tokens=* delims=" %%a in ('dir /a-d /b *.txt^|find /c "txt$"') do (
- set n=%%a
- if !n!==1 for /f "tokens=* delims=" %%a in ('dir /a-d /b *.txt 2^>nul') do "sour_txt=%%~a")
-
- :jmp1
- ::确定CUE文件(xx.cue)
- if not "%~1"=="" (set "sour_CUE=%~nx1"&goto jmp2)
- if EXIST "%pathname%.cue" (set "sour_CUE=%pathname%.cue") else (for /f "tokens=*" %%a in ('dir /a-d /b "*!pathname!*.cue"') do set "sour_CUE=%%a")
- :jmp2
- if "!sour_txt!"=="" (set /p "sour_txt=专辑描述文件:")
- if "!sour_CUE!"=="" (set /p "sour_CUE=源CUE文件:")
- echo 工作目录: %workPath%&echo 专辑描述文件: !sour_txt!&echo 源CUE文件: !sour_CUE!&if EXIST "1.txt" echo 1.txt
- ::==============================================================
- set "desFile=New_%sour_CUE%"
- set /p "chiose=补充CUE|剪切APE的NEW_CUE(1|2|q):"
- if "%chiose%"=="1" (
- if EXIST "1.txt" set "sour_txt=1.txt"&echo 存在1.txt文件!
- set /p "xxoo=sour_txt文件来源方式(APE原始说明.txt|从foorb2000粘贴建立)(1|2):"
- echo !xxoo!|findstr "^[12]$">nul&&goto :format_!xxoo!||(echo ERROR&ping /n 4 127.1>nul)
- )
- if "%chiose%"=="2" set /p "xxoo=音轨号 时间(0x~xx mm:ss mm:ss):"
- if "%chiose%"=="2" goto :CUT_time
- goto:eof
- ::==============================================================
-
- :format_1 格式如: 01.烟花三月
- echo 格式1
- for /f "tokens=1* delims=.[#] " %%a in ('type "%sour_txt%"^|findstr "^[0-9] ^[0-9][0-9]"') do (
- if 1%%a LEQ 19 (
- for /f "tokens=*" %%A in ("%%b") do if not "%%A"=="" (set title_0%%a=%%~A) else set "title_0%%a="
- echo %tracknumber%0%%a: !artist_%%a!+!album_%%a!+!title_0%%a!+
- ) else (
- for /f "tokens=*" %%A in ("%%b") do if not "%%A"=="" (set title_%%a=%%~A) else set "title_%%a="
- echo %tracknumber%%%a: !artist_%%a!+!album_%%a!+!title_%%a!+
- )
- )
- echo off&pause
- goto :work
- ::==============================================================
-
- :format_2 格式如: 02. 张琼 - [? #02] 望月
- ::=================sour_txt=从foorb2000 粘贴建立的音轨信息文件==================
- echo 格式2
- echo off
- for /f "tokens=2,3,4,5 usebackq delims=.[#]" %%a in ("%sour_txt%") do (
- for /f "tokens=*" %%A in ("%%a") do if not "%%A"=="" (set artist_%%c=%%~nA &set artist_%%c=!artist_%%c:~0,-3!) else set "artist_%%c="
- for /f "tokens=*" %%B in ("%%b") do if not "%%B"=="?" (set album_%%c=%%~nB &set album_%%c=!album_%%c:~0,-2!) else set "album_%%c="
- set "tracknumber_%%c=%%c"
- for /f "tokens=*" %%D in ("%%d") do if not "%%D"=="?" (set title_%%c=%%~nD &set title_%%c=!title_%%c:~0,-1!) else set "title_%%c="
- echo %tracknumber%%%c: !artist_%%c!+!album_%%c!+!title_%%c!+
- )
- goto :work
- ::==============================================================
-
- :CUT_time xxoo=音轨号 时间(0x~xx mm:ss)
- echo 剪切计算
- for /f "tokens=1,2,3 delims= " %%a in ("%xxoo%") do set "tracknumber=%%a"&set "start_time=%%b"&set "end_time=%%c"
- echo %start_time% %end_time% %tracknumber%
- set "BL_writeCUE=1"&set "BL_search=0"
- for /f "tokens=* usebackq" %%a in ("%sour_CUE%") do (
- if /i "%%a"=="TRACK 01 AUDIO" set "BL_writeCUE=0"
- if /i "%%a"=="TRACK %tracknumber% AUDIO" set "BL_search=1"
-
- if "!BL_search!"=="1" (
- for /f "tokens=*" %%i in ('echo %%a^|findstr /i "INDEX 01"') do (
- for /f "tokens=3 delims= " %%A in ("%%i") do set "first_time=%%A"
- echo %%i 音轨%tracknumber%初始时间 = !first_time!&goto cut_next
- ))
- if "!BL_writeCUE!"=="1" echo %%a>>"%desFile%"
- )
- :cut_next
- set "mm1=%first_time:~0,2%"&set "ss1=%first_time:~3,2%"
- set "mm2=%start_time:~0,2%"&set "ss2=%start_time:~3,2%"
- set "mm3=%end_time:~0,2%"&set "ss3=%end_time:~3,2%"
- set "mm3=00%mm3%"&set "mm3=!mm3:~-2!
- set "mm2=00%mm2%"&set "mm2=!mm2:~-2!
- set /a mm1=1%mm1% "%%" 100,ss1=1%ss1% "%%" 100
- set /a mm2=1%mm2% "%%" 100,ss2=1%ss2% "%%" 100
- set /a mm3=1%mm3% "%%" 100,ss3=1%ss3% "%%" 100
- set /a s1=%ss2%+%ss1%&set /a s2=%ss3%+%ss1%
- if !s2! GTR 60 set /a "s2=!s2!-60"&set /a mm3=!mm3!+1
- if !s1! GTR 60 set /a "s1=!s1!-60"&set /a mm2=!mm2!+1
- echo %mm2%:%ss2% %mm3%:%ss3% !mm2!:!ss2! !mm3!:!ss3! !s1! !s2!
- set /a m1=!mm1!+!mm2!&set /a m2=!mm1!+!mm3!
- set "m1=00!m1!"&set "m1=!m1:~-2!
- set "m2=00!m2!"&set "m2=!m2:~-2!
- set "s1=00%s1%"&set "s1=!s1:~-2!
- set "s2=00%s2%"&set "s2=!s2:~-2!
- (echo TRACK 01 AUDIO
- echo INDEX 01 !m1!:%s1%:%first_time:~-2%
- echo TRACK 02 AUDIO
- echo INDEX 01 !m2!:%s2%:%first_time:~-2%)>>"%desFile%"
- goto :end
-
- ::==============================================================
- :work UTF-8 编码需要转换成ASNI
- call:is_UTF-8 "%sour_CUE%"
- if %ret% EQU 1 (
- echo UTF-8 文件
- iconv -c -f utf-8 -t GB2312 "%sour_CUE%">"%temp%\%sour_CUE%"
- set "sour_CUE=%temp%\%sour_CUE%")
- echo.
- cd.>"%desFile%"
- set /a NUM=101&set "BL_writeCUE=1"
-
- for /f "tokens=*" %%a in ('type "%sour_CUE%"') do (
- if /i "%%a"=="TRACK 01 AUDIO" set "BL_writeCUE=0"
-
- if "!BL_writeCUE!"=="1" (
- echo %%a>>"%desFile%"
- ) else (
- echo %%a|findstr /i "^FILE">nul &&echo %%a>>"%desFile%"
- echo %%a|findstr /i "^PERFORMER ^TRACK">nul &&echo %%a>>"%desFile%"
- echo %%a|findstr /i "^INDEX">nul &&echo %%a>>"%desFile%"
- )
-
- if /i "%%a"=="TRACK !NUM:~-2! AUDIO" (
- for %%A in (!NUM:~-2!) do (
- if not "!title_%%A!"=="" set /p =正在写入:!title_%%A! <NUL&echo TITLE "!title_%%A!">>"%desFile%"
- if not "!artist_%%A!"=="" echo PERFORMER "!artist_%%A!">>"%desFile%"
- set /a NUM+=1
- )))
-
- goto end
- ::==============================================================
- :end
- echo.
- echo 按任意键退出&pause>nul
- exit /b
-
- ::=======================判断文件UTF-8编码==============================
- :is_UTF-8 filename 返回值 ret=1 true ret=0 flash
- echo exit|%ComSpec% /k prompt f0 f 0$_n%~s1$_l0$_d0 f$_q$_|debug>"%temp%\%~n1.tmp"
- type "%temp%\%~n1.tmp"|findstr /c:" EF BB BF">nul&&set ret=1||set ret=0
- del "%temp%\%~n1.tmp" 2>nul
- goto :eof
- ::=======================END CODE===============================
复制代码
|