@title bmx2mp3.bat (bmx2wav 1.2.0-) @echo off && setlocal EnableDelayedExpansion :: 現時点でできないこと : 同時ドロップアイテムのフルパスの総文字数が "%*" から溢れるとダメ? :: 現時点でアウトなパス : ^を含む, &の連続を含む, 先頭が &, :: 2010/09/10 =;, %&! を含む名前のアイテムドロップ (& は先頭以外で不連続なら変換可能) :: 2010/09/09 ファイル+フォルダの複数同時ドロップ, 譜面数カウンタ, エラー関係 :: バッチパラメータが =;, %& を含む場合の対策, 多重起動の抑制----------------------------- set cmdline=!cmdcmdline:*" =! set cmdline=!cmdcmdline:~0,-1! set fq= set fg= set fb=true set cmdline2= set n=0 if not defined cmdline goto :next :for set c=!cmdline:~%n%,1! if not defined c goto :next if defined fq ( if !c!==^" set fq=& if defined fg set cmdline2=!cmdline2!^" ) else ( if !c!==^ if not defined fb ( set fb=true if defined fg ( set fg= set cmdline2=!cmdline2!^" ) ) if not !c!==^ if defined fb ( set fb= if not !c!==^" ( set fg=true set cmdline2=!cmdline2!^" ) ) if !c!==^" set fq=true& if defined fg set cmdline2=!cmdline2!^" ) set cmdline2=!cmdline2!!c! set /a n+=1 goto :for :next if defined fq set cmdline2=!cmdline2!^"& if defined fg set cmdline2=!cmdline2!^" if defined fg set cmdline2=!cmdline2!^" call :main !cmdline2:%%=%%%%! 4>>%0 exit :main :: --------------------------------------------------------------------------------ここまで :: ******************** config ******************** set BMX="C:\hoge\bmx2wav" set OUT="E:\bmx2output" set BMC="C:\Documents and Settings\UserName\SendTo" set INI="bmx2mp3.ini" :: ************************************************ :: 以下の三点を対応させること :: 1) この bat の config での出力フォルダパス指定 :: 2) INI 出力テンプレート - 出力フォルダパス指定 :: 3) 実際の出力フォルダの名前 set DAT=%date:/=-% set DAN=%time:~0,8% :: ちゃんと走るかチェック開始 (好みで削って)----------------------------------------------- if not exist %BMX%\ ( echo %BMX% echo この bmx2wav 実行ファイルディレクトリは存在しないか、無効なパスです。 echo bmx2mp3.bat 内 *config* の set BMX="" 行を確認してください。 goto ending ) if not exist %OUT%\ ( echo %OUT% echo この MP3 出力専用ディレクトリは存在しないか、無効なパスです。 echo bmx2mp3.bat 内 *config* の set OUT="" 行を確認してください。 echo: echo ここには %INI% で設定した MP3 出力専用ディレクトリを指定します。 echo たとえば %INI% の出力テンプレートが echo: echo OutputTemplateSource=E:\bmx2output\[ %%#ARTIST# ] %%#TITLE#_%%J.wav echo: echo だったならば、bmx2mp3.bat 内 *config* は以下のようにします。 echo: echo set OUT="E:\bmx2output" goto ending ) if not exist %BMC%\ ( echo %BMC% echo このディレクトリは存在しないか、もしくは無効なパスです。 echo bmx2mp3.bat 内 *config* の set BMC="" 行を確認してください。 echo: echo :: ここに BMxCount.bat を置くとオマケ機能が発動するよ goto ending ) cd /d %BMX% if not exist bmx2wavc.exe ( echo %BMX% echo この実行ファイルディレクトリに bmx2wavc.exe が見つかりません。 goto ending ) if not exist %INI% ( echo %BMX% echo この実行ファイルディレクトリに echo MP3 変換専用の設定ファイル %INI% が見つかりません。 echo bmx2mp3.bat 内 *config* の set INI="" 行を確認してください。 echo: echo MP3 変換専用の設定ファイルそのものが存在しない場合は、 echo GUI 版 bmx2wav.exe の 詳細設定 - 出力タブ にて echo MP3 出力専用ディレクトリ %OUT% のパスを指定し、 echo その設定に任意の名前をつけて保存するか、またはコピーしてください。 echo: echo 以下は %INI% の記述例です。Use... と Remove... は必ず 1 にしてね echo CancelAtResounding=1 echo UseOutputTemplate=1 echo OutputTemplateSource=E:\bmx2output\[ %%#ARTIST# ] %%#TITLE#_%%J.wav echo RemoveCanNotUseCharAsFilePath=1 goto ending ) :: OutputTemplateSource と set OUT= の内容を比較してパスが同一か判定する案 :: めんど :: でもテストでしょっちゅう ini だけパス書き直すのを忘れる俺にはかなり必要 cd /d %OUT% :: aoTuV 使う場合は以下の 8 行消す if not exist lame.exe ( echo %OUT% echo この MP3 出力専用ディレクトリに lame.exe を置いてください。 echo エンコーダが存在しないため、バッチ処理を中止します。 echo: echo Lame 入手先 : http://www.rarewares.org/mp3-lame-bundle.php goto ending ) if exist *.wav ( echo %OUT% echo この MP3 出力専用ディレクトリから WAV ファイルを退避させてください。 echo 安全性の観点および変換エラー記録の都合上、バッチ処理を中止します。 goto ending ) :: ちゃんと走るかチェック終了-------------------------------------------------------------- cd /d %BMX% bmx2wavc.exe -version echo: cd /d %BMC% :: 譜面数カウントが時間食ってイヤな場合は, すぐ下の if ブロック消すか, :: 上のパラメータ云々ブロック消したうえで下の !cmdline2:%%=%%%%! を %* に変更 if exist BMxCount.bat ( call BMxCount.bat !cmdline2:%%=%%%%! echo 以上の譜面を一括変換します。 pause echo: ) cd /d %BMX% set /a CNT=0 set /a SUC=0 set /a ERR=0 :: ファイル名が ! を含む場合, !遅延展開! が有効のとき, %1 や %%A の展開で誤爆する :: ので, 遅延展開を無効化したうえで, !hoge! 部分を call ... %%hoge%% で代用する setlocal DisableDelayedExpansion :mainloop set FLD=%~1\ if .%1==. goto result if not exist "%FLD%" ( if /i "%~x1"==".bms" goto single if /i "%~x1"==".bme" goto single if /i "%~x1"==".bml" goto single if /i "%~x1"==".pms" goto single ) for /r %1 %%A in (*.bms *.bme *.bml *.pms) do ( set TMP=%%A call set /a CNT=%%CNT%%+1 call echo BMx no.%%CNT%% : bmx2wavc.exe -c %INI% "%%A" call :encode ) shift goto mainloop :: ファイルドロップ時は拡張子の大文字小文字が区別されたので仕方なく if /i で回す :single set TMP=%1 call set /a CNT=%%CNT%%+1 call echo BMx no.%%CNT%% : bmx2wavc.exe -c %INI% "%~1" call :encode shift goto mainloop :result if %CNT%==0 ( echo 拡張子 .bms .bme .bml .pms のファイルがないので終了します。 goto ending ) call echo BMx : %%CNT%% call echo MP3 : %%SUC%% / %%CNT%% call echo ERR : %%ERR%% / %%CNT%% echo RUN : %DAT% %DAN% echo END : %date:/=-% %time:~0,8% cd /d %OUT% if %ERR%==0 ( (echo ^(%date:/=-% %time:~0,8%^) error No.0 : PERFECT) >> bmxerror.txt 2>>&1 (echo --------------------------------------------------------------------------------) >> bmxerror.txt 2>>&1 ) else ( (echo --------------------------------------------------------------------------------) >> bmxerror.txt 2>>&1 ) goto ending :ending cd /d %BMX% echo: endlocal pause :: 俺用コニメ殺し procterm conime.exe exit :: エンコーダとかオプションとか好みで設定してね---------------------------------------------- :: lame (CBR 192kbps) = lame -b 192 *.wav (-S:don't print progress report, VBR histograms) :: aoTuV (VBR 192kbps) = venc -q6 *.wav :encode cd /d %OUT% if exist "*.wav" ( echo WAV ファイルを MP3 フォーマットに変換しています。 ... lame.exe -b 192 -S "*.wav" del "*.wav" call set /a SUC=%%SUC%%+1 echo ... 完了 ) else ( call set /a ERR=%%ERR%%+1 (call echo ^(%date:/=-% %time:~0,8%^) error No.%%ERR%% : %%TMP%%) >> bmxerror.txt 2>>&1 echo この譜面を %OUT:"=%\bmxerror.txt に記録しました。 ) cd /d %BMX% echo: exit /b :: %OUT% に wav あれば変換, なければ譜面エラーとみなしてテキスト出力 (書き足し型) :: Ctrl+C 中断時も譜面エラー扱いになるけどまあいいや :: エラー自体を記録したいけど, 方法がわからない :: 頭のやつ echo;%* pause