ファイル名の置換(ファイル名の一部文字を別の文字に置き換える)

以前にもファイル名の置換についてのエントリー→(ファイル名の一部を置き換えるようなリネームの方法 - バッチもん研究所 blog) を書きましたが今回はmougでの質問。基本的にバッチファイルの構成は同じです。

(Windows XP Professional) ファイル名の置換
投稿日時: 09/03/31 11:07:13 投稿者: いちごみるく

フォルダ内に複数のファイルがあり、その複数のファイル名の一部を全て変更したいとき、置換のように一気に変更する方法はないでしょうか

http://www.moug.net/faq/viewtopic.php?t=39800&sid=5ad4abefc530b4a2844e143393e0f067

投稿日時: 09/03/31 11:17:03 投稿者: りょう

フリーソフト以外ですと、このぐらいでしょうか。
http://pc.nikkeibp.co.jp/article/NPC/20060301/231453/

投稿日時: 09/03/31 11:29:37 投稿者: いちごみるく

例えば・・・ ()→【】 2008年→2009年 等なんですが、難しいでしょうか?

と質疑が続きますが、結論としてバッチファイルで実現可能です。

例えば・・・として例示されている()→【】 2008年→2009年を実施するバッチです。

echo off
for %%f in ( * ) do call :sub "%%f"
exit /b

:sub
set fname=%1
set fname=%fname:(=【%
set fname=%fname:)=】%
set fname=%fname:2008年=2009年%
ren %1 %fname%
goto :EOF

簡単に解説しますと、for文で全てのファイルを対象にファイル名を引数にしてサブルーチン(:sub)を呼び出します。サブルーチンでは引数を環境変数 fname に代入して、変数の置換機能を使って置き換えを行っています。この置換については set /? のヘルプに記載されています。最後に rename コマンドでファイル名を置換後のファイル名にリネームしています。