バッチファイルで時間の計算(分単位)

スタートアップスクリプトにWindowsUpdateを自動実行するバッチファイルを仕込み、
午前1時~午前5時の間に起動すると自動的にWindowsUpdateを行い、
自動シャットダウンを行う、というバッチファイルを作成したのですが、
スタートアップスクリプト内では Shutdownコマンドが正常に動作しないみたいでして。

そんなわけで、at コマンドを使用して【5分後にシャットダウン】という形にすれば大丈夫だろうと思ったのですが、atコマンドって

at 1:30 shutdown.exe /s /f /t 0


みたいに時刻指定なんですよね。
で、「5分後」という指定をバッチファイルで計算しようとしたらわりと面倒だったのでここに残しておきます。



【使い方】


argv1に現在の時刻を0:00~23:59の範囲で入れて、
argv2に加算/減算する時間を分単位で入れると
環境変数RESULTに結果が入ります。
結果は 0:00~23:59 で得られます。

@echo off
rem 【argv1】は時間、【argv2】は加算/減算する時間(分単位)

set argv1=0:00
set argv2=-10

set /a MINUTE=%argv1:~-2,2%
set /a HOUR=%argv1::=%/100
set /a MINTOTAL=HOUR*60+MINUTE+argv2

if %MINTOTAL% LSS 0 set /a MINTOTAL+=((-MINTOTAL/1440+1)*1440)
set /a MINTOTAL%%=1440
set /a HOUR=MINTOTAL / 60
set /a MINUTE=MINTOTAL %% 60

if %MINUTE% LSS 10 set MINUTE=0%MINUTE%
if %HOUR% LSS 10 set HOUR=0%HOUR%

set RESULT=%HOUR%:%MINUTE%
echo %RESULT%


上記を実行すると 23:50 と表示されます。

なお、現在の時間を使用する場合は
set argv1=%TIME:~0,2%:%TIME:~3,2%

とすると良いです。

【仕様】



  • argv1=23:50、argv2=30 とした場合、24:20 にはならず 0:20 となります

  • argv1=0:20、 argv2=-30 とした場合、-0:10 のようにマイナスにはならず 23:50 となります

  • argv1=23:00、 argv2=10000 のようにやたら大きな値を使っても問題なく動作します

  • argv1 に -0:20 のようなマイナスの値を指定することはできません


[PR]
by golorih | 2011-02-02 16:19 | バッチファイル | Trackback | Comments(2)
トラックバックURL : https://golorih.exblog.jp/tb/14108251
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by yomox9 at 2015-09-14 13:33 x
例えば、0:08とか0:09だと
無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、
または 8 進 (021 桁) です。
と表示され値が出力結果がおかしくなります。時刻や分を取り出した時、値の頭に0がつくので8進数とみなしているためだと思います。
set /a MINUTE=%argv1:~-2,2%
set /a HOUR=%argv1::=%/100
この部分を
if "%argv1:~-2,1%" == "0" (
set /a MINUTE=%argv1:~-1%
) else (
set /a MINUTE=%argv1:~-2,2%
)

if "%argv1:~1,1%" == ":" (
set /a HOUR=%argv1:~0,1%
) else (
set /a HOUR=%argv1:~0,2%
)
こうしたら大丈夫でした。
ところで、バッチファイルでこんなことが出来るのかという記事があって楽しませてもらっています。
Commented by golorih at 2015-09-14 21:39
> yomox9さん
バグのご指摘&修正コードまでありがとうございます。

バッチファイルはさすがにやめて、そろそろPowerShellに移らないといけないなぁ、と思いつつ、そっちの業務から離れてしまったので習得する機会がなさそうな気がします...


システム関連の個人的な備忘録。基本的にWindows関連です。

プロフィール

関連


Memoる

一生懸命だと知恵が出る
中途半端だと愚痴が出る
いい加減だと言い訳が出る

「やりたい」なんて言葉は使う必要が無い。「今やってる」「もうやった」「やらないことにした」なら使って良い。
まずは相手を好きになる、その次に相手のいい部分を探す、そして評価できる部分を見つける。それからです、誉めるのは。

カテゴリ

全体
ソフトウェア関連
ソフトウェア開発
Linuxサーバ
その他
Webサービス
MySQL
システム管理
test
バッチファイル
つぶやき
パソコンメーカー
jQuery
レビュー
実験と検証
セキュリティ対策
YahooPipes
vbs
ハードウェア関連
WordPress
JavaScript
HTML&CSS
Welcart
未分類

以前の記事

2018年 01月
2017年 12月
2017年 10月
2017年 09月
2017年 07月
2016年 12月
2016年 10月
2016年 08月
2016年 07月
2016年 04月
2016年 03月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 05月
2015年 03月
2015年 01月
2014年 11月
2014年 10月
2014年 09月
2014年 08月
2014年 06月
2014年 05月
2014年 04月
2014年 03月
2014年 02月
2014年 01月
2013年 12月
2013年 11月
2013年 10月
2013年 09月
2013年 08月
2013年 07月
2013年 06月
2013年 05月
2013年 04月
2013年 03月
2013年 02月
2013年 01月
2012年 12月
2012年 11月
2012年 10月
2012年 09月
2012年 08月
2012年 07月
2012年 05月
2012年 04月
2012年 03月
2012年 02月
2011年 11月
2011年 10月
2011年 09月
2011年 06月
2011年 05月
2011年 04月
2011年 03月
2011年 02月
2010年 12月
2010年 11月
2010年 10月
2010年 09月
2010年 08月
2010年 07月
2010年 06月
2010年 02月
2009年 12月
2009年 10月
2008年 12月
2008年 06月
2008年 05月
2008年 04月
2008年 03月
2008年 01月
2007年 12月
2007年 11月
2007年 08月
2007年 07月
2005年 09月
2005年 08月

フォロー中のブログ

最新のコメント

現在(2018/04/2..
by むらびとA at 10:27
こんにちは RDP W..
by U at 16:29
リコーの件でたどり着きま..
by T at 14:14
検索してたどり着きました..
by KA at 06:53
VNCでええやん、まんど..
by 7C at 14:59
最近AEROADMINを..
by 森隆弘 at 09:48
亀ですがリンク先修正しま..
by golorih at 14:47
あれから何度かONUとP..
by 朝から at 19:56
バッチが見れないので中身..
by あいりっく at 17:28
>朝から >自宅の環境..
by Troro at 23:29

その他のジャンル

ファン

記事ランキング

ブログジャンル

ネット・IT技術

画像一覧