YiaoWang
{@last-update}
前へ | 目次 | 次へ

コマンドプロンプト:バッチの多重起動を抑制する


概要

「*.bat」のプロセス名はコマンドプロンプトのタイトル(XPの場合 cmd.exe )になります。 そこで、処理直前にタイトルを変更することでタスクを一意にし、そのバッチが実行中かを判断します。


注意事項

Windows XP Home などの OS では、tasklist.exe が入っておらず、「'TASKLIST'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」というエラーになるため、この方法は利用できません。


バッチ サンプル

@ECHO OFF
CD /D %~DP0

SET CMD_NAME=BAT0001
SET LOG_PATH=batch.log
SET CMD_RESULT=0

REM ---------------------------------------------------------------------------
REM 前処理
REM ---------------------------------------------------------------------------
REM 開始
ECHO %DATE% %TIME% %CMD_NAME% バッチ開始 >>%LOG_PATH%
REM 多重起動チェック
@TASKLIST /v | FINDSTR %CMD_NAME%
IF %ERRORLEVEL%==0 GOTO EXCEPTION_ALREADY_RUN

REM 自己起動後名称変更(多重起動防止の為)
TITLE %CMD_NAME%

REM ---------------------------------------------------------------------------
REM 本処理
REM ---------------------------------------------------------------------------


REM ---------------------------------------------------------------------------
REM 後処理
REM ---------------------------------------------------------------------------
GOTO END

REM 多重起動エラー
:EXCEPTION_ALREADY_RUN
ECHO %DATE% %TIME% %CMD_NAME% 既に起動されています。 >>%LOG_PATH%
GOTO END

REM 終了
:END
ECHO %DATE% %TIME% %CMD_NAME% バッチ終了 >>%LOG_PATH%
Exit(%CMD_RESULT%)

参考サイト



前へ | 目次 | 次へ
inserted by FC2 system