LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-04-07

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コマンドに与える「変更前」「変更後」のファイル名を渡しています。

おわりに

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

ではまた!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1