スポンサーリンク

【Bat】再起動後自動実行するバッチの作り方

Bat
スポンサーリンク

今回は処理中に再起動を要求されるケースの対応方法の一つとして、再起動後に自動実行されるバッチの作り方をまとめてみました。

再起動を要求される処理は非常に多い

Windowsの初期セットアップやカスタマイズ、脆弱性の対応など、モジュールをインストールする際にバッチを使用する機会はたくさんあります。
ソフトウェアやドライバ、Windows 更新プログラムのインストールなど、実際に適用していくとリブートを要求されるケースはザラにあります。そこで、再起動が必須な状況でも動作するようなバッチを作成してみましょう。

本サイト内では「”」をコピーした際に全角になることがあります。その際は貼り付けた後に半角の「”」で置換してください。

RunOnceレジストリを使う

単純に再起動後に実行させるという要件であればRunOnceレジストリを使用してしまえば事足りるでしょう。
今回はユーザーでログオン後に実行させることを前提にHKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceを使用します。

RunOneレジストリについてはこちらを参考にしてください。
https://support.microsoft.com/ja-jp/help/179365/info-run-runonce-runservices-runservicesonce-and-startup

引数を使って再起動判定する

RunOnceレジストリにスクリプト登録時に引数をつけることができます。
そこにジャンプしたいラベルを与えることで、再起動後に必要な処理へ移動させることができます。
バッチの第1引数は、%1に格納されます。(第2引数は%2、第3引数は%3・・・

RunOnceを使ってみる

reg add "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" /v "再起動後実行" /t REG_SZ /d "%~0 AfterReboot1" /f
※%~0は自分自身のフルパスを返す変数

そして判定をバッチの一番最初に記述します。
それによって1つのバッチで処理を段階的に実行させることができます。
配信したりする場合は便利ですね。

if "%1" neq "" goto :%1

こんな感じでいいでしょう。
※IFの条件式にある%1の両端に「"」がないと動作しませんでした。

作成例

さて、上記を踏まえてまとめたコードがこちらになります。

再起動後も継続して処理を続けるサンプルコード

@echo off
cd /d %~dp0
==============================
再起動判定
==============================
if "%1" neq "" goto :%1
"再起動を要求される処理"
reg add "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" /v "再起動後実行" /t REG_SZ /d "%~0 AfterReboot1" /f
exit
==============================
再起動後処理
==============================
:AfterReboot1
"再起動後に行いたい処理"
exit

内容に合わせて処理を書き換えてみてくださいね。

まとめ

  • 再起動後実行させるためにはRunOnceレジストリが便利
  • %~0と引数を使えば自分自身だけで処理を完結できる

いろんな自動化処理に使えるテクニックなので、是非活用してみてください。

コメント

タイトルとURLをコピーしました