バッチファイルを使って未起動状態のアプリケーションを自動起動する
読者の中には客先あるいは、特定サービスから定期的にメールが送信されることがわかっており、それ以前に必ず Outlook が起動されている状態を担保したい方がいらっしゃるのではないでしょうか。
またVBA等を利用してさらなる業務効率化を図っている方の中にはExcel/Access等のVBAコードの中でOutlookのオブジェクトに直接アクセスし、特定メール、添付ファイルの自動保存を行っている方もいると思います。
通常これらの実行は、Outlookそのものが起動状態にあることを前提とするため、Outlookが未起動状態のときにこういったVBAコードを実行すると例外が発生し、最悪 WindowPCを再起動しないとOutlookが使えなくなる等の問題が発生します。
本記事ではこういった背景から、バッチファイルを使って Outlook のような一般的なアプリケーションが現在 Windows PC内で現在起動中かどうかを確認し、起動されていない場合にこれを起動する方法を紹介します。
バッチファイル
バッチファイルの動作
以下に例として Outlook が現在 Windows PC内で現在起動中かどうかを確認し、起動されていない場合にこれを起動するバッチファイルを記載します。このバッチファイルは
- 直接ダブルクリックして起動
- 他のバッチファイルから “call %USERPROFILE%\Tools\bat\CheckAndRun_Outlook.bat“のように呼び出して同期起動
- タスクスケスケジューラに登録して定期的に自動起動
することで利用します。
ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。
@echo off
setlocal
rem スリープタイマ値を設定する
set wait_time=10
rem プロセスチェック
tasklist | find "OUTLOOK.EXE" > NUL
if %ERRORLEVEL% == 0 (
echo "Outlook is running"
echo %date% %time% : Outlook is running >> %USERPROFILE%\Tools_Data_Logs\bat\CheckAndRun_Outlook.log
) else (
echo "Start Outlook"
Start OUTLOOK.EXE
echo %date% %time% : Outlook is activated from Task Scheduler >> %USERPROFILE%\Tools_Data_Logs\bat\CheckAndRun_Outlook.log
timeout /t %wait_time% > nul
)
endlocal
この バッチファイル CheckAndRun_Outlook.bat を%USERPROFILE%\Tools\bat 配下に保存して、ダブルクリックするとOutlook の起動状態を確認し、もしOutlookが起動されていない場合、Outlookを起動します。
バッチファイルの簡単な説明
行番号 | 説明 |
---|---|
1 | バッチファイルの中で出力されるメッセージを非表示にします。 |
2 | バッチファイルの中で使用する変数がこのバッチファイルの中でのみ有効であると宣言しています。 |
4,7 | rem はバッチファイルの中のコメント行を表しています。 |
5 | set はバッチファイルの中の変数に値を設定します。ここでは19行目で利用する Outlook起動後のタイマーの設定値 wait_time を 10(秒) に設定しています。このタイマー値は自分の環境に合わせて調整してください。 |
8 |
tasklist は Windows PCの中で実行中のプロセス名を表示するコマンド、 find は入力の中の特定文字列の有無を調査するコマンド、 |
10-13 |
%ERRORLEVEL% = 0 つまり 8行めの実行結果として Outlook が実行中と判定された場合に実行されるステートメントであり、
します。 |
14-21 |
%ERRORLEVEL% = 1 つまり 8行めの実行結果として Outlook が未起動と判定された場合に実行されるステートメントであり、
します。 |
22 | バッチファイルの中で使用した変数がこのバッチファイルの中でのみ有効であることを終了宣言しています。 |
tasklist と find コマンド
理解を助けるため、Windows のコマンドプロンプト上で tasklist と find コマンドを実際に使ってみましょう。
Mirosoft Windows [Version 10.0.19044.2364]
(c) Microsoft Corporation. All rights reserved.
C:\Users\devel>tasklist
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 6,784 K
Registry 148 Services 0 68,296 K
smss.exe 536 Services 0 308 K
csrss.exe 692 Services 0 2,996 K
wininit.exe 852 Services 0 1,420 K
csrss.exe 860 Console 1 1,072 K
:
Microsoft.Photos.exe 21392 2 67,928 K
RuntimeBroker.exe 6720 2 42,080 K
mmc.exe 20668 RDP-Tcp#114 3 26,544 K
OUTLOOK.EXE 13728 Services 0 20,892 K
cmd.exe 15004 Services 0 1,804 K
:
audiodg.exe 27748 Services 0 15,940 K
node.exe 32464 2 29,320 K
tasklist.exe 24384 RDP-Tcp#114 3 9,236 K
WmiPrvSE.exe 35032 Services 0 10,636 K
C:\Users\devel>tasklist | find "OUTLOOK.EXE"
OUTLOOK.EXE 13728 Services 0 20,484 K
C:\Users\devel>tasklist | find "OUTLOOK.EXE" >NUL
C:\Users\devel>echo %ERRORLEVEL%
0
C:\Users\devel>
このコマンドプロンプトの実行結果において
4行目で実際に tasklist コマンドを実行していますが、この出力の中で
21行目に “OUTLOOK.EXE” という文字列が出現していますね。
31行目でこの “OUTLOOK.EXE” という文字列を find コマンドのパラメータにすると
32行目に見られるように単一のプロセスに対する実行状態を抜き出せるというわけですね。
34行目でこの結果を非表示にして
36行目で find コマンドの実行結果 %ERRORLEVEL% を確認すると
37行目に 0 (つまり成功:文字列あり)が設定されていることがわかるわけです。
先ほどのバッチファイル CheckAndRun_Outlook.bat はこれらの結果を元に組み立てられているわけですね。
ここでは Outlook を題材に アプリケーション(プロセス)の実行有無を確認していますが、以上のことを知ればどんなアプリケーション(プロセス)でも理屈は同じなので、読者の方のニーズに合わせてカスタマイズしましょう。
なお、これらの tasklist 、find コマンドの詳細については以下のサイトにこれらのコマンドを含む詳細なリファレンスがありますので、必要に応じてこちらも参照されることをお勧めします。
またこのバッチファイルをタスクスケジューラから自動起動するする方法についても必要に応じて
を参照下さい。
本記事ではバッチファイルを使って Outlook のような一般的なアプリケーションが現在 Windows PC内で現在起動中かどうかを確認し、起動されていない場合にこれを起動する方法を紹介しました。
この記事が読者の方のお役にたてれば幸いです。