【コマンドスクリプト】宛先・件名・本文をテンプレート化したバッチファイルを作る【Bat】
もぐもです。(`・ω・´)🍙
前回は,GoogleメールのURLに宛先・件名・本文が設定できる方法について書きました。
mogmo811.hatenablog.com
簡単なものならこれ方法で十分です。
今回は,以下のような理由でバッチファイルを作ってみました。
- 件名に月日を使いたい
- 本文設定時,ユーザー(今んとこ,うちしかいないけど)に改行の文字列"%0D%0A"を入力させたくない
バッチファイルの中身(全体)
@echo off rem 定数 =============== set BODY_TEMPLATE_FILE=bodyTemplate.txt set CRLF=%%0D%%0A set YEAR=%date:~,4% set MONTH=%date:~5,2% set DAY=%date:~-2% rem ユーザー設定 ========== set TO_ADDRESS=tanaka@***.jp set CC_ADDRESS=aida@***.jp,iida@***.jp set BCC_ADDRESS=mogmo@***.jp set REPORTER=もぐも set SUBJECT=【日報】%MONTH%/%DAY% %REPORTER% setlocal enabledelayedexpansion if exist %BODY_TEMPLATE_FILE% ( for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %BODY_TEMPLATE_FILE%') do ( rem memo: %%Xには行番号,%%Yは本文 set LINE=%%Y%CRLF% set BODY=!BODY!!LINE! ) ) rem 設定内容表示 ========== echo 設定内容 ---------------------------------------------- echo 報告日 : %YEAR%/%MONTH%/%DAY% echo 報告者 : %REPORTER% echo To : %TO_ADDRESS% echo Cc : %CC_ADDRESS% echo Bcc : %BCC_ADDRESS% echo 件名 : %SUBJECT% echo 本文 : %BODY_TEMPLATE_FILE%を参照してください。 echo ------------------------------------------------------- rem 宛先,件名,本文をセットしたメール作成画面を表示 ========== echo. echo Googleメールの新規メール作成画面を既定のブラウザで開きます... start "" ^"https://mail.google.com/mail/?view=cm^&fs=1^&to=%TO_ADDRESS%^&cc=%CC_ADDRESS%^&bcc=%BCC_ADDRESS%^&su=%SUBJECT%^&body=%BODY%^" rem 終了 ========== endlocal pause
コード上部
@echo off rem 定数 =============== set BODY_TEMPLATE_FILE=bodyTemplate.txt set CRLF=%%0D%%0A set YEAR=%date:~,4% set MONTH=%date:~5,2% set DAY=%date:~-2%
echo off
で「以降実行中のコマンドを表示しない」設定にし,さらに@
を付けることでこのコマンドすら非表示にするrem ~
でコメントが書ける。コメントなので実行はしない。- 本文
BODY_TEMPLATE_FILE
変数に "bodyTemplate.txt" を設定する。変数に文字列を代入するときは,set 変数=文字列
と書く CRLF
変数に改行に使う文字列を代入するYEAR
MONTH
DAY
には%date%で取得した年月日を必要な文字列だけ抽出して代入する
ユーザー設定部
rem ユーザー設定 ========== set TO_ADDRESS=tanaka@***.jp set CC_ADDRESS=aida@***.jp,iida@***.jp set BCC_ADDRESS=mogmo@***.jp set REPORTER=もぐも set SUBJECT=【日報】%MONTH%/%DAY% %REPORTER% setlocal enabledelayedexpansion if exist %BODY_TEMPLATE_FILE% ( for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %BODY_TEMPLATE_FILE%') do ( rem memo: %%Xには行番号,%%Yは本文 set LINE=%%Y%CRLF% set BODY=!BODY!!LINE! ) )
TO_ADDRESS
CC_ADDRESS
BCC_ADDRESS
にはそれぞれ送信したいアドレスを設定する。複数アドレスがある場合は ",(カンマ)" で区切る。REPORTER
は件名で使いたかったので用意した。不要なら削除SUBJECT
に件名を設定する。上記の例なら "【日報】 4/29 もぐも" のようになる- bodyTemplate.txtに書いた本文を
for
文で1行読みながらURL用の文字BODY
を組み立てていく。 - 普通にファイルを1行ずつ読むと空白行が無視されてしまうので,その対策として
'findstr /n "^" %BODY_TEMPLATE_FILE%'
を記述。findstr
を使用して行頭に行番号を付け,%%X
に行番号,%%Y
に一文が代入されるようになっている。 set LINE=%%Y%CRLF%
で取得した一文%%Y
のあとすぐに改行文字CRLF
を付けた文字列をLINE
に代入するset BODY=!BODY!!LINE!
でBODY
に前の状態のBODY
とLINE
を代入しているsetlocal enabledelayedexpansion
やset BODY=!BODY!!LINE!
については遅延環境変数でググってください。
設定内容表示部
これはechoでコマンドプロンプトに情報を表示しているだけなので説明は割愛します。
rem 設定内容表示 ========== echo 設定内容 ---------------------------------------------- echo 報告日 : %YEAR%/%MONTH%/%DAY% echo 報告者 : %REPORTER% echo To : %TO_ADDRESS% echo Cc : %CC_ADDRESS% echo Bcc : %BCC_ADDRESS% echo 件名 : %SUBJECT% echo 本文 : %BODY_TEMPLATE_FILE%を参照してください。 echo -------------------------------------------------------
URLを作ってブラウザを起動する
rem 宛先,件名,本文をセットしたメール作成画面を表示 ========== echo. echo Googleメールの新規メール作成画面を既定のブラウザで開きます... start "" ^"https://mail.google.com/mail/?view=cm^&fs=1^&to=%TO_ADDRESS%^&cc=%CC_ADDRESS%^&bcc=%BCC_ADDRESS%^&su=%SUBJECT%^&body=%BODY%^" rem 終了 ========== endlocal pause
echo.
でコマンドプロンプトに空行を表示- Tips:
start http://~
:規定のブラウザでURLを開く - Tips:
start "ブラウザのファイルの場所" "http://~"
:ブラウザを指定してURLを開く - 今回はURLを
"
で囲むため,start "" "https://~"
と記述して,ブラウザを指定せずURLを開きますよ~っていうコードにしてます。 "
や&
はWindowsちゃんが命令コードと勘違いしてしまうので,文字列として扱いたい場合は"^
を前につけてあげてください。これをエスケープといいます。URLを囲む"
もエスケープしたのは,途中で変数を%TO_ADDRESS%
のように使いたかったからです。普通に"
のみだと,変数ではなく"%TO_ADDRESS%" という文字列として処理されてしまいます。- setlocal したら endlocal
pause
:キー入力待機状態にする。確認のためキー入力状態にしていただけなので,なくても可能。
完成
あとはバッチファイルと本文テンプレート用のテキストファイルを同じ場所に保存しておくだけ。
バッチファイルを実行すれば規定ブラウザで新規メール作成画面が開くはずです。
ではまた。
もぐも(`・ω・´)🍙