[INDEX] [TOP]

バッチで時刻の操作

ここでは、Windows2000/XP のコマンドプロンプトでの時刻処理行うバッチファイルを紹介します。

現在の時刻をバッチで呼び出す
バッチでn分後の時刻を求める
指定した時間帯のみバッチを実行する

現在の時刻をバッチで呼び出す

バッチで現在の時刻を呼び出すにはよく time /t が紹介されています。ただし、この場合HH:MM形式なので、秒の単位まで得るには %time% を使う方が簡単です。ここでは、 %time% を time コマンドの2つの例で、秒まで含んだファイル名を作る方法を紹介します。

例1)%time% の場合


set fname=%TIME::=%
set fname=%fname:‾0,6%
echo 現在の日時 %DATE% %TIME% > %fname%.txt

例2)time /t の場合

  echo:|time がミソ。これで秒までを表示できる。NT4でも動作可能。


for /F "tokens=2" %%a in ('echo:^|time') do set fname=%%a
set fname=%fname::=%
set fname=%fname:‾0,6%
echo 現在の日時 %DATE% %TIME% > %fname%.txt

ちなみに、95/98系では for 文や %date% %time% などの環境変数が存在しないため、ファイルの作成時刻を取得する以下の方法で行う。


@echo off
REM Win95/98系で日付と時刻を取得する。
echo set date=%%3 > $tmp.bat
echo set time=%%4 >>$tmp.bat
dir | find "$tmp" > timeset.bat
call timeset.bat
del $tmp.bat
del timeset.bat
echo %date% %time% >> log.txt

バッチでn分後の時刻を求める

バッチでn分後の時刻を求めます。ちょこっと直せば、n分前も簡単に求まるでしょう。日付を考えずに時刻だけならわりと簡単に求めることができます。


@echo off
REM n分後の時刻を求める
REM 引数で指定して画面に時刻(HH:MM)を表示する。
REM 引数がないときは30分後とする。

REM 現在時刻の取得/
  for /F "tokens=1,2 delims=:" %%i in ('time /t') do set h=%%i && set m=%%j 
  set add=30
  if not "%1"=="" set add=%1
REM 先頭の0を取り除く
  if %h% LSS 10 set h=%h:‾1,1%
  if %m% LSS 10 set m=%m:‾1,1%
REM %add%分後の計算 
  set /a totalm=h*60+m
  set /a totalm=totalm+%add%
REM 時の編集
  set /a h=totalm/60
  if %h% GEQ 24 set /a h=h-24
  if %h% LSS 10 set h=0%h%
REM 分の編集
  set /a m=totalm%%60
  if %m% LSS 10 set m=0%m%
echo %h%:%m%

指定した時間帯のみバッチを実行する

指定した時間帯のみバッチを実行し、時間外では「時間外です」と表示して終了するサンプルです。9時から17時まで動作可能としています。


@echo off
set start=0900
set end=1659
set now=%time: =0%
set nowstr=%now:‾0,2%%now:‾3,2%
echo %nowstr%
if 1%nowstr% LSS 1%start% goto err
if 1%end% LSS 1%nowstr% goto err
echo この時間は動作OKです。
goto end
:err
echo 時間外です
:end


Copyright (c) 2003-2007 じゃく
last update:2006-09-09