INDEX
-
- 背景
-
- 目的
-
- やろうず!
-
- あとがき
1. 背景
…という事で、作ったアプリのテストで、iPhone/iPadのスクショを撮ったんですが、高解像度な上にデフォルトがフルカラーPNGなんだね。
後でテスト結果集計する為に大量のpngファイルを一括でjpgにしたり、画質を落としたりってのをやりたかったので古(いにしえ)のバッチコマンド仕立てにしたという話。自作なので客先PCに入れるにも理解が得やすいし。
それにしてもiPhoneって端末からそのままアップするとファイル名がハッシュだったり、画質最高のPNGだったり解像度お化けだったりで扱いにくね…。大切な事なので2回言いました。
それに何と言っても GUIで1ファイル毎にやってられっかYO!面倒くせぇんだYO!!(あ、関係ないですが藤原書記は大好きです)
今回は、導入編という事でバッチコマンドの基本部分を自分のPCに構築する。
2. 目的
コマンドプロンプトでお手製のバッチコマンドを使えるようにする。
完成系はこんな感じ。
> test
バッチコマンドのテンプレートです。これを参考にコマンドを実装して下さい。
usage)
test
>
3. やろうず!
- この記事でやる作業の流れはこんな感じ
-
- バッチコマンド置き場をWindowsのパスに通す
-
- バッチコマンドを作る
-
- 動作確認する
-
3.1. バッチコマンド置き場をWindowsのパスに通す
- 置き場所を決める!
- 環境変数の編集ウィンドウを開き、バッチコマンド置き場を定義した環境変数を環境変数
PATH
に追加する
3.2. バッチコマンドを作る
今回はテンプレなんで、これをコピペして、文字コードをShift-JIS
でテキストファイル化しておく。名前はtest.bat
とでもしておいてくれ。なので自分は d:\usr\bin\test.bat
にファイルを置いた。
@echo off
rem 引数チェック
if "%1"=="" (
call :HELP_MSG
exit /b 0
) else (
rem 引数のバリデとか事前処理
if /i not "%1"=="start" (
echo Opps! unknown arguments.
exit /b 1
)
)
rem メイン処理
echo hello!
exit /b 0
rem ------------------------------
rem ヘルプ用メッセージ
rem ------------------------------
:HELP_MSG
echo バッチコマンドのテンプレートです。これを参考にコマンドを実装して下さい。
echo usage)
echo test start
echo.
exit /b
3.3. 動作確認する
コマンドプロンプトを起動しなおして、次のように操作する。
同じような応答が返ってきたら今回の作業は成功だ!おめでとう!!
whereコマンドでパスが通っている事を確認する
> where test
D:\usr\bin\test.bat
- 返ってきたな。ぐっぼーぃ!
- コマンドがないぞ と怒られる場合は、コマンドプロンプト再起動、環境変数の不備を確認してみてくれ
そのまま実行してヘルプメッセージが出る事を確認する
> test
バッチコマンドのテンプレートです。これを参考にコマンドを実装して下さい。
usage)
test start
- よしよし、これもいいな。
- ヘルプメッセージが出ない場合は、バッチコマンドの文字コードが
Shift-JIS
になっている事や、コピペミスを確認してみてくれ。ローカルチェックはしているので出ないはずなんだ。
おまけで付けた引数分岐も確認してみる
> test start
hello!
>
- ここまでできればテンプレとして十分だと思う!
3.4. ちょっとだけソース解説
先述のスクリプトはこんな感じでラベルを使って疑似的なサブルーチンを実現している。
任意の処理
を :ラベル名
と exit /b
で括るイメージだ。
ラベルに飛ぶだけだったらgoto
で良いんだけど、exit
をした時に戻ってきて欲しいのでcall
を使うのが肝。また、ラベルは別にサブルーチンではないので、メイン処理用のexit /b
が無いと疑似サブルーチンの処理も順次実行してしまう。
@echo off
rem 疑似サブルーチンの呼出元
echo hello! how are you?
call :FINE_THX
echo me too.
exit /b
rem 疑似サブルーチンの呼出先
:FINE_THX
echo fine, thanks.
exit /b
上記を実行するとこんな感じになるので、サブルーチンを呼んだ感じの順番になっている事が分かる。
> test
hello! how are you?
fine, thanks.
me too.
>
せっかくなんで、call
の代わりにgoto
を使うとこうなる。me too.
が出てこないね。
> test
hello! how are you?
fine, thanks.
>
メイン処理の exit /b
を忘れた場合。me too.
の後にまたfile, thanks.
が出てしまっている。
つまり疑似サブルーチンをまた実行してしまったという事。他言語だとwhich case
にbreak
を入れ忘れたと言えば通じるだろうか。
> test
hello! how are you?
fine, thanks.
me too.
fine, thanks.
>
4. あとがき
今回作成したバッチコマンドはいわゆる「hello, world」なので このままでは クソの役にも立たない。
連続物の記事として以下のようなバッチコマンドは実際に作って記事にしてみようと思っている。
- 特定URL+連番ファイルのダウンロードする
- 高画質PNGをそこそこの品質・解像度のJPGに変換する
…というかバッチコマンドはもう作ったので、記事作成は年末年始のお題にしておこうかなと思ってる。
もしこの記事が「役に立った!次も見たい!」という方は高評価ボタンとチャンネル登録をしt(ry
あー、サブルーチン周りももう少し書きたい気分。これは別記事かな。
以上!