ここでは、Windows2000/XP のコマンドプロンプトでの時刻処理行うバッチファイルを紹介します。
バッチで現在の時刻を呼び出すにはよく 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分前も簡単に求まるでしょう。日付を考えずに時刻だけならわりと簡単に求めることができます。
@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