DOSバッチ間で、レジストリを経由して情報共有するケースのメモ
※ケース説明
ある2本のプログラム(PG-A、PG-B)において、PG-Bが時間起動で稼動した際、
PG-Aが実行中か否かで処理を分岐させるケース
※レジストリ取得
reg queryの戻り値はOSに依存、環境に応じてfor文を要調整
(以下はWinXPpro環境での例)
<PG-A>
rem ***レジストリ初期化***
REG DELETE HKLM\Software\TESTFD /v CHKPG_DATE /f
REG DELETE HKLM\Software\TESTFD /v CHKPG_FLG /f
REG DELETE HKLM\Software\TESTFD /v CHKPG_NAME /f
rem ***レジストリSET*** システム日付,フラグ(=1),PG名
REG ADD HKLM\Software\TESTFD /v CHKPG_DATE /d %date:~-10,4%%date:~-5,2%%date:~-2% /f
REG ADD HKLM\Software\TESTFD /v CHKPG_FLG /d 1 /f
REG ADD HKLM\Software\TESTFD /v CHKPG_NAME /d HOGE0123 /f
・
・
(処理記述)
・
・
rem ***レジストリ削除***
REG DELETE HKLM\Software\TESTFD /v CHKPG_FLG /f
rem ***レジストリSET*** フラグ(=0)
REG ADD HKLM\Software\TESTFD /v CHKPG_FLG /d 0
<PG-B>
rem ***レジストリ値取得***
FOR /F "TOKENS=1,2,*" %%I IN ('REG QUERY "HKLM\Software\TESTFD" /v "CHKPG_DATE"') DO IF "%%I"=="CHKPG_DATE" SET CHKPGDATE=%%K
FOR /F "TOKENS=1,2,*" %%I IN ('REG QUERY "HKLM\Software\TESTFD" /v "CHKPG_FLG"') DO IF "%%I"=="CHKPG_FLG" SET CHKPGFLG=%%K
FOR /F "TOKENS=1,2,*" %%I IN ('REG QUERY "HKLM\Software\TESTFD" /v "CHKPG_NAME"') DO IF "%%I"=="CHKPG_NAME" SET CHKPGNAME=%%K
rem ***PG-A稼動チェック(システム日付とフラグ(=1)で判定)***
if not %CHKPGDATE%==%date:~-10,4%%date:~-5,2%%date:~-2% goto STEP_OK
if not %CHKPGFLG%==1 goto STEP_OK
rem ***NG***
:STEP_NG
echo 「%CHKPGNAME%」は実行中です
・
・
(処理記述)
・
・
goto STEP_END
rem ***OK***
:STEP_OK
・
・
(処理記述)
・
・
rem ***終了***
:STEP_END