バッチファイルと同一フォルダ内にある複数のファイルの名前を一括で置換します。
置換する文字列は、バッチファイルのファイル名で指定します。
*使用している様子のGIFアニメです。クリックで再生(ループ)します。
バッチファイルを実行して、同一フォルダ内のファイル名を一括で置換しています。
置換する文字列は、バッチファイルの名前で指定します。
ファイル名は『Replace@(置換前の文字列)@(置換後の文字列).bat』となっています。 例:『あいうえお.txt』を『あい上お.txt』としたい場合は、『Replace@うえ@上.bat』
なお、『置換後の文字列』がない場合は、『置換前の文字列』を削除する処理になります。
バッチファイル(.bat)は、コマンドプロンプトのコマンドを記述したテキストファイルです。メモ帳で書いて、拡張子を『.bat』にして保存するだけで作成できます。
目次
バッチファイルを作る
バッチファイルの中身
下記のコードをメモ帳に貼り付けてください。
ファイル名は『Replace@(置換前の文字列)@(置換後の文字列).bat』にして下さい。
@は半角のアットマークです。区切り文字は『delims=@』の部分で変更します。
例:『Replace@はてな@Hatena.bat』にするとファイル名の"はてな"を"Hatena"に置換します。
@echo off rem ↑実行したコマンドを画面に表示しない rem 文字コードをUTF-8に設定 chcp 65001 rem バッチファイル自体のファイル名(拡張子なし)を取得 set OWN_FILE=%~n0 rem バッチファイル名を"@"で分割して置換前と置換後の文字列を取得する for /f "delims=@ tokens=2,3" %%a in ("%OWN_FILE%") do ( rem 置換前の文字列を取得 set OLD_STR=%%a rem 置換後の文字列を取得 set NEW_STR=%%b ) rem フォルダ内のファイル数分ループ for %%f in ( * ) do ( rem ファイル名を引数としてサブルーチンを呼び出す call :sub "%%f" ) rem メインルーチンを終了 exit /b rem サブルーチンを定義 :sub rem 引数からファイル名を取得 set FILE_OLD=%1 rem 文字列を置換 call set FILE_NEW=%%FILE_OLD:%OLD_STR%=%NEW_STR%%% rem バッチファイル自体ではない場合 if not "%OWN_FILE%" == "%~n1" ( rem ファイル名を変更 ren %FILE_OLD% %FILE_NEW% ) rem サブルーチンを終了 exit /b
やっていること
- ファイル名を”@”で分割して2番目と3番目文字列を取得します。
バッチファイルのファイル名は下記のようになっています。
『Replace@(置換前の文字列)@(置換後の文字列)』
- バッチファイルと同じフォルダにあるファイルの数だけ、サブルーチンを繰り返し呼び出します。
サブルーチンには引数としてファイル名を渡します。
- サブルーチン
引数で受け取ったファイルの名前を指示通り置換して、ファイル名を変更します。
バッチファイル自体の名前は変更しないようにしています。
文字列の分割について
文字列の分割は下記のようなfor文で行います。
echo off rem ↑実行したコマンドを画面に表示しない rem 文字コードをUTF-8に設定 chcp 65001 rem 分割する文字列 set STRING=はてな_ブログ_ドット_コム rem 文字列を"_"で分割して、1~4番目の要素を取り出し、結果を変数aから順に格納する for /f "delims=_ tokens=1-4" %%a in ("%STRING%") do ( rem 1番目の文字列を取得する set STR_1=%%a rem 2番目の文字列を取得する set STR_2=%%b rem 3番目の文字列を取得する set STR_3=%%c rem 4番目の文字列を取得する set STR_4=%%d ) rem 結果を出力する echo STR_1=%STR_1% echo STR_2=%STR_2% echo STR_3=%STR_3% echo STR_4=%STR_4% rem 結果を見るために一時停止する pause rem 実行結果 rem STR_1=はてな rem STR_2=ブログ rem STR_3=ドット rem STR_4=コム
設定 | 意味 |
---|---|
delims=_ | "_"を区切り文字とします。区切り文字はここで変更します。 |
tokens=1-4 | 分割した結果の1~4番目の文字列を取得します。 |
%%a | %%aに1番目の文字列、%%bに2番目の文字列といったようにアルファベット順に 格納されます。『%%i』と設定した場合は%%iに1番目の文字列が入ります。 |
現在のフォルダのファイル名を取得する
下記のfor文は現在のフォルダにあるファイルの数だけループします。
ループするごとに各ファイルの名前を順次『%%f』に格納します。
『*』の部分を『*.txt』とするとテキストファイル(.txt)だけが対象となります。
@echo off rem ↑実行したコマンドを画面に表示しない rem フォルダ内のファイル数分ループ for %%f in ( * ) do ( rem ファイル名を表示する echo %%f ) rem 結果を見るために一時停止する pause
文字列の置換について
文字列の置換は下記のように行います。
置換前の文字列は、大文字と小文字が区別されません。
下記のコードでは、置換前の文字列は"HATENA"ですが、Hatena"の部分が置換されます。
@echo off rem ↑実行したコマンドを画面に表示しない rem 文字コードをUTF-8に設定 chcp 65001 rem 元の文字列 set ORIGINAL=HelloHatenaBlog rem 置換前の文字列 set OLD=HATENA rem 置換後の文字列 set NEW=はてな rem 文字列を置換 call set RESULT=%%ORIGINAL:%OLD%=%NEW%%% rem 結果を出力する echo %RESULT% rem 結果を見るために一時停止する pause rem 実行結果:HelloはてなBlog
今回は以上です。お疲れさまでした。