前回テストで<バッチファイル内でバッチファイルの連続実行をテストしてみる - treedown’s Report>にてバッチファイルからバッチファイルの連続実行をテストしました。
今回は本番環境使用に修正し仕掛けてみた結果をご報告です。
バッチファイルの修正
バッチファイルは以下のように修正しました。
実行している処理は<VBSを使って画面非表示でバッチファイルを連続実行してみる - treedown’s Report>で作成したファイル名「_AutoUpd.vbs」の機能をバッチファイルに移し替えたものです。
なお、フォルダ内は、以下のような状態とします。
--------------------------------------------------------------
C:\Users\user-1\AutoUpdate>dir
C:\Users\user-1\AutoUpdate のディレクトリ
2024/07/02 12:31 <DIR> .
2024/06/21 18:01 <DIR> ..
2021/12/03 16:36 4,549 7Zupdate.bat
2022/01/14 17:52 3,867 CubePgUp.bat
2021/12/15 01:35 3,925 CubePVerup.bat
2021/12/15 01:43 3,848 CubeUVup.bat
2024/07/01 14:29 4,498 VLCupdate.bat
2021/12/15 02:52 4,389 WinSCPupd.bat
2023/02/17 01:06 1,189 _AutoUpd.vbs
2024/07/01 14:43 981 _Autoupdate.bat
--------------------------------------------------------------
実際のバッチファイルです。
--------------------------------------------------------------
バッチファイル
--------------------------------------------------------------
@echo off
if not "%1" == "1" (
start /min cmd /c call "%~f0" 1
exit
)
set CHKFLDRPATH=\\FileSVR\ShareF
rem フォルダのアクセス可否を確認
if not exist "%CHKFLDRPATH%" goto NotFolderPath
rem フォルダアクセス可能な時の処理
rem echo フォルダにアクセス可能です。
rem echo 確認フォルダは "%CHKFLDRPATH%" です。
CALL "C:\Users\user-1\AutoUpdate\7Zupdate.bat"
CALL "C:\Users\user-1\AutoUpdate\CubePgUp.bat"
CALL "C:\Users\user-1\AutoUpdate\CubePVerup.bat"
CALL "C:\Users\user-1\AutoUpdate\CubeUVup.bat"
CALL "C:\Users\user-1\AutoUpdate\VLCupdate.bat"
CALL "C:\Users\user-1\AutoUpdate\WinSCPupd.bat"
goto end
:NotFolderPath
rem フォルダが存在しない場合の処理
rem echo フォルダにはアクセスできません
rem echo 確認フォルダ"%CHKFLDRPATH%"へアクセスできません。
:end
rem echo .
rem echo 処理を終了します。
set CHKFLDRPATH=
--------------------------------------------------------------
最初に<VBSを使わずに画面非表示のバッチファイル連続実行(最小化実行編) - treedown’s Report>でテストした最小化実行のコマンドを入れています。後述のタスクスケジューラを使ってバックグラウンドでの画面非表示を設定するのですが、念のためバッチファイル内にも最小化実行を仕込んでおいて画面に出てきた時の備えにしています。(なくても動作に影響はありません。)
続いて<バッチファイル内で共有フォルダ有無から処理を分岐する - treedown’s Report>でテストした共有フォルダ有無を判定したあとに、共有フォルダに接続可能であればインストールバッチを連続実行するようにしています。基本の作りはVBSで構成していた時と同じです。
共有フォルダに接続ができない状態の場合、何もせず終了します。
CALLコマンドで呼び出しているバッチファイルはそれぞれ別の記事で作成したサイレント実行で書くアップデートの.exeファイルを実行する子のバッチファイルです。
タスクスケジューラにセットする
今回のポイントとなる設定がこのタスクスケジューラへの設定です。画面非表示のバッチファイル実行はタスクスケジューラに依存しています。
基本的にやっていることは<VBSを使わずに画面非表示のバッチファイル連続実行(タスクスケジューラ編) - treedown’s Report>と差はありませんが、ここに実際の設定を掲載しておくようにします。
タスクのプロパティ画面「全般」のタブでは、一点変更点を、
「ユーザがログオンしているかどうかにかかわらず実行する」に変更しておきます。
その他の設定項目である実行ユーザや最上位の特権で実行するオプションは既存のタスク設定そのまま維持です。
「ユーザがログオンしているかどうかにかかわらず実行する」に設定を変更しても、隣のタブ「トリガー」での指定が、
このように「ユーザ ○○のログオン時」となっていれば、タスクが実際に実行されるのは指定したユーザのサインイン動作直後に限定されます。このため、前述の「ユーザがログオンしているかどうかにかかわらず実行する」はバックグラウンド実行かフォアグラウンド実行になるかの切替でしかありません。
※ただし、バックグラウンド実行は実行中に手動で動作を制御することができませんので、かならず終了までが自動的に実行されるよう、バッチファイルの作りに注意する必要があります。今回のバッチはこの辺りも大丈夫です。
なお、この画面での変更はありません。
次の「操作」タブへ画面を変更し、
開始するプログラムを以前の「_AutoUpd.vbs」から置き換え対象の「_Autoupdate.bat」に変更しました。
※ちょっとファイル名が異なることに後で気づいて失敗したと思いました。「_AutoUpd.bat」にしたほうが良かった。いずれ変更しておこうと思います。
操作タブの編集画面:
ここで移行先である「_Autoupdate.bat」を指定します。
以上でタスクスケジューラに仕掛けたタスクの修正は完了です。
VBScript終了に備える
本来ならここはPowerShellベースのpsスクリプトを使用するのが正しいような気もしますが、ひとまず得意のバッチファイルで解決としました。
VBSの終了で置き換えが必要になるので、ここは手早く移行可能な方法で完了とします。