にゃごすwiki

スクリプト関連/2010-10-22

  ATコマンドで数分ごとに実行する


久しぶりにバッチファイルなんぞ書いたので、ネタにしてみる。
windowsにはATコマンドで決まった時間にコマンド等を実行することができるけど、時間単位とか数分単位に実行することはできない。(すべて登録してしまえばできるけど現実的じゃない。)
バッチファイルだけで、何とかしてみた。


実行するバッチファイルの中で、実際の処理をした後に、ATコマンドで自分自身を登録し直せばいいってところまでは問題ない。で問題になるのが次の時間の計算。バッチファイルでは計算ができないので、簡単に時間に足すなんてことができないので(よね?)ので激しく力業で次の時間を計算してみた。

@echo off

rem 10分ごとに行う処理

:NEXT_AT
for /F "delims=: tokens=1,2" %%i in ( "%3" ) do call :NEXTTIME %%i %%j
echo 次回は %NEXTTM% です。
at %3 %1\%2 %1 %2 %NEXTTM%
goto :EOF

:NEXTTIME
if "%2"=="00" set MM=10
if "%2"=="10" set MM=20
if "%2"=="20" set MM=30
if "%2"=="30" set MM=40
if "%2"=="40" set MM=50
if "%2"=="50" goto :ADDHH
set NEXTTM=%1:%MM%
goto :EOF
:ADDHH
set MM=00
if "%1"=="00" set HH=01
if "%1"=="01" set HH=02
if "%1"=="02" set HH=03
if "%1"=="03" set HH=04
if "%1"=="04" set HH=05
if "%1"=="05" set HH=06
if "%1"=="06" set HH=07
if "%1"=="07" set HH=08
if "%1"=="08" set HH=09
if "%1"=="09" set HH=10
if "%1"=="10" set HH=11
if "%1"=="11" set HH=12
if "%1"=="12" set HH=13
if "%1"=="13" set HH=14
if "%1"=="14" set HH=15
if "%1"=="15" set HH=16
if "%1"=="16" set HH=17
if "%1"=="17" set HH=18
if "%1"=="18" set HH=19
if "%1"=="19" set HH=20
if "%1"=="20" set HH=21
if "%1"=="21" set HH=22
if "%1"=="22" set HH=23
if "%1"=="23" set HH=00
set NEXTTM=%HH%:%MM%
goto :EOF

このサンプルでは、10分ごとに実行される。
起動方法は

c:\temp\xxx.bat c:\temp xxx.bat 10:10

で実行すると、処理を実行後、次の実行時間がスケジュール登録されます。

なお、ATコマンドは実行されるコマンドは別のユーザーなので注意が必要です。