ファイル名を変更するコマンドプロンプトのバッチファイルを作ったのですが、改善したい点があります。
#要件
カレントディレクトリ内の全てのphpファイルを、デリミタ'_'で区切ったn番目のtokenを、標準入力で入力された文字列で置き換える(renameする):
(例1)
shizuka_minamoto.php -> shizuka_nobi.php
yoshitsune_minamoto.php -> yoshitsune_nobi.php
tarou_minamoto.php -> tarou_nobi.php
2番目のtokenを、入力文字列'nobi'で置き換えた
(例2)
shizuka_minamoto_love.php -> shizuka_minamoto_violin.php
takahiro_karasawa_love.php -> takahiro_karasawa_violin.php
yaju_senpai_love -> yaju_senpai_violin.php
3番目のtokenを、入力文字列'violin'で置き換えた
#コード
以下がbatファイルです。
カレントディレクトリ内の全てのphpファイルのファイル名を「filename.txt」に一行ずつ書き込み、
そこから一つずつファイル名を取り出して、リネームしています。
bat
1@echo off 2 3for %%a in (*.php) do ( 4 echo %%a >> filename.txt 5) 6 7setlocal ENABLEDELAYEDEXPANSION 8for /f "tokens=1,2,3 delims=_" %%a in (filename.txt) do ( 9 rename %%a_%%b_%%c %1_%%b_%%c 10) 11end local 12 13setlocal ENABLEDELAYEDEXPANSION 14for /f "tokens=1,2 delims=_" %%a in (filename.txt) do ( 15 rename %%a_%%b %1_%%b 16) 17end local 18 19del filename.txt
今回のケースでは、操作対象のファイルのファイル名の形式は、デリミタ'_'の数が1個のケースと2個のケースの2種類のみだったので、単純に、処理を1個のケースと2個のケースで分けて並べて書きました。
#改善したい点
・cd内のファイルには、ファイル名に含まれるデリミタ''の数が1個のものと2個のものが混在しているため、当てはまらないファイルに対して実行された処理については必ずエラーが出る(期待した挙動はしてくれるが、エラーが気持ちわるい)
→ファイル名に含まれるデリミタ''の数を自動的に認識して条件分岐で処理したい
コマンドプロンプトという原始的なプログラム言語には、そこまで便利な関数が存在するのでしょうか?それとも色々工夫してやるしかないのでしょうか?
ご回答宜しくお願いしいます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。