2011年4月26日火曜日

DOSからのレジストリ操作

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

0 件のコメント:

コメントを投稿