ファイル名の一部を置き換えるようなリネームの方法

今回もYahoo!知恵袋からの質問

コマンドプロンプトを使ったファイルの置換について kmshtkmさん

コマンドプロンプトのrenameで

aaa_bbb.mp3
ccc_ddd.mp3
といったファイル名を

aaa(bbb).mp3
ccc(ddd).mp3
というファイル名に置換したいのですが、どのようにすればいいでしょうか?

rename *_*.mp3 *(*).mp3
としたのですが、ダメでした

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1121701811

質問は、"_"(アンダーバー)で区切られた前半_後半.mp3 というファイル名の前後を前半(後半).mp3 にリネームしたいという要望と理解しました。例では前半も後半も3文字分ですが長さは不定だとします。

for分の"delims=_"で区切って……と考えましたが、面倒なのでものぐさな方法で作ってみました。
制限事項としてアンダーバーはファイル名に1つあり、前半と後半に区切る場所にある(先頭や末尾にはない)とします。

作ったバッチファイルがこれ。

echo off
for %%a in (*_*.mp3) do call :sub "%%a"
exit /b

:sub
set fname=%~1
set fname=%fname:_=(%
set fname=%fname:.=).%
ren %1 "%fname%"
goto :EOF

単純にファイル名を環境変数に取得して、"_"を"("に、"."を")."に置換して、renameコマンドに渡しているだけです。