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
コマンドに与える「変更前」「変更後」のファイル名を渡しています。
#おわりに
サブルーチンを使うと、一気にプログラムっぽくなりますね!
ひとつのツールでいろいろなことができると、お得感があってうれしくなります。
ではまた!