質問: ### バッチファイルの作成 拡張子以降をリネームするバッチファイルを作成したいです。 具体的なイメージとしては、 aaa.txt_bk → aaa.txt aaa.xls_bk_bk → aaa.xls のような拡張子の後ろにアンダースコアで始まるサフィックス部分を削除して、 通常の拡張子へ戻すということを実現したいです。 複数回アンダースコアが出現する場合もあります。 通常の拡張子となる部分はどのような拡張子が来ても問題ない作りとしたいです。 ### 現在のソースコード ``` set target_dir="実行ディレクトリを指定" for /R %target_dir% %%i in (*.*_*) do ren %%i %%~ni ``` この状態で実行すると通常の拡張子もすべて削除され、拡張子なしファイルとなってしまいます。 具体的なコード例のご教授お願いいたします。
回答: アンダースコア以降を取った拡張子を4文字までとして、 ``` set target_dir="実行ディレクトリを指定" for /R %target_dir% %%i in (*.*_*) do call :sub "%%i" exit /b :sub set X=%~x1 if "%X:~2,1%"=="_" ( set X=%X:~0,2% ) else if "%X:~3,1%"=="_" ( set X=%X:~0,3% ) else if "%X:~4,1%"=="_" ( set X=%X:~0,4% ) else if "%X:~5,1%"=="_" ( set X=%X:~0,5% ) else ( echo 拡張子のエラー "%1" exit /b ) ren %1 "%~n1%X%" exit /b ``` 5文字以上も対象にするなら、`if`を必要なだけ並べてください。