バッチファイルで拡張子「.zi_」「.zi」「.ex_」「.ex」をリネームする(PPAP)


Y子です。
昨日のバッチファイルを改良してみました。
PPAPの添付ファイルって、zipファイルなら「.zi」で来ることもありますし、自動解凍書庫の「.ex_」や「.ex」で来ることもありますもんね。これらも判別するようにしました。

概要・用途

以下の通り、拡張子をリネームするバッチファイルです。
 「.zi_」「.zi」 → 「.zip
 「.ex_」「.ex」 → 「.exe
拡張子をバッチファイルに関連付けしておくと、ファイルをダブルクリックするだけでリネームされます。とても便利です。
バッチファイルにドロップしても、同じ動作になります。

コード

rename_ppap.bat
@echo off

rem 引数がない場合は終了する
if "%~1"=="" (
  echo 引数がありません
  pause
  exit /b
)

rem 変更前のファイル名(フルパス)「C:\work dir\test.xxx」
set str_oldfile=%~1

rem ファイル名分割…拡張子なし「test」と、拡張子のみ「.xxx」
set str_old_fn=%~n1
set str_old_ex=%~x1

rem 与えられたファイルの拡張子が「.zi_」「.zi」「.ex_」「.ex」なら
if "%str_old_ex%"==".zi_" (
  call :renamefile "%str_oldfile%" "%str_old_fn%.zip"
) else if "%str_old_ex%"==".zi" (
  call :renamefile "%str_oldfile%" "%str_old_fn%.zip"
) else if "%str_old_ex%"==".ex_" (
  call :renamefile "%str_oldfile%" "%str_old_fn%.exe"
) else if "%str_old_ex%"==".ex" (
  call :renamefile "%str_oldfile%" "%str_old_fn%.exe"

rem 想定外のファイルなら
) else (
  echo なにもしませんでした
)

pause
exit /b

rem ====サブルーチン====
rem ファイル名変更サブルーチン
:renamefile
  set str_old=%~1
  set str_new=%~2

  ren "%str_old%" "%str_new%"
  echo ファイル名を「%str_new%」に変更しました
exit /b

説明

バッチファイルのif文にはorが使えないので、else ifで同じ処理を複数書くことになります。
冗長になるので、リネーム部分はサブルーチン替わりのラベルを使いました。
サブルーチンの引数には、renコマンドに与える「変更前」「変更後」のファイル名を渡しています。

おわりに

サブルーチンを使うと、一気にプログラムっぽくなりますね!
ひとつのツールでいろいろなことができると、お得感があってうれしくなります。

ではまた!