mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

【コマンドスクリプト】宛先・件名・本文をテンプレート化したバッチファイルを作る【Bat】

もぐもです。(`・ω・´)🍙
前回は,GoogleメールのURLに宛先・件名・本文が設定できる方法について書きました。
mogmo811.hatenablog.com

簡単なものならこれ方法で十分です。
今回は,以下のような理由でバッチファイルを作ってみました。

  • 件名に月日を使いたい
  • 本文設定時,ユーザー(今んとこ,うちしかいないけど)に改行の文字列"%0D%0A"を入力させたくない

作ったもの

  • URLを自動生成し,Googleメールを自動で開くバッチファイル
  • 本文のテンプレートにつかうbodyTemplate.txtファイル

上記2ファイルを同じ場所に置けば実行が可能です。

バッチファイルの中身(全体)

@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%
  1. echo off で「以降実行中のコマンドを表示しない」設定にし,さらに@を付けることでこのコマンドすら非表示にする
  2. rem ~でコメントが書ける。コメントなので実行はしない。
  3. 本文BODY_TEMPLATE_FILE変数に "bodyTemplate.txt" を設定する。変数に文字列を代入するときは,set 変数=文字列と書く
  4. CRLF変数に改行に使う文字列を代入する
  5. YEARMONTHDAYには%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!
    )
)
  1. TO_ADDRESSCC_ADDRESSBCC_ADDRESSにはそれぞれ送信したいアドレスを設定する。複数アドレスがある場合は ",(カンマ)" で区切る。
  2. REPORTERは件名で使いたかったので用意した。不要なら削除
  3. SUBJECTに件名を設定する。上記の例なら "【日報】 4/29 もぐも" のようになる
  4. bodyTemplate.txtに書いた本文をfor文で1行読みながらURL用の文字BODYを組み立てていく。
  5. 普通にファイルを1行ずつ読むと空白行が無視されてしまうので,その対策として'findstr /n "^" %BODY_TEMPLATE_FILE%'を記述。findstrを使用して行頭に行番号を付け,%%Xに行番号,%%Yに一文が代入されるようになっている。
  6. set LINE=%%Y%CRLF%で取得した一文%%Yのあとすぐに改行文字CRLFを付けた文字列をLINEに代入する
  7. set BODY=!BODY!!LINE!BODYに前の状態のBODYLINEを代入している
  8. setlocal enabledelayedexpansionset 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
  1. echo.コマンドプロンプトに空行を表示
  2. Tips: start http://~:規定のブラウザでURLを開く
  3. Tips: start "ブラウザのファイルの場所" "http://~":ブラウザを指定してURLを開く
  4. 今回はURLを"で囲むため,start "" "https://~"と記述して,ブラウザを指定せずURLを開きますよ~っていうコードにしてます。
  5. "&Windowsちゃんが命令コードと勘違いしてしまうので,文字列として扱いたい場合は"^を前につけてあげてください。これをエスケープといいます。URLを囲む"エスケープしたのは,途中で変数を%TO_ADDRESS%のように使いたかったからです。普通に"のみだと,変数ではなく"%TO_ADDRESS%" という文字列として処理されてしまいます。
  6. setlocal したら endlocal
  7. pause:キー入力待機状態にする。確認のためキー入力状態にしていただけなので,なくても可能。

完成

あとはバッチファイルと本文テンプレート用のテキストファイルを同じ場所に保存しておくだけ。
バッチファイルを実行すれば規定ブラウザで新規メール作成画面が開くはずです。


ではまた。
もぐも(`・ω・´)🍙