コマンドプロンプトで
C:\Users\username>aa.bat 17 5
と打てば17:05分にシャットダウンするようなバッチファイルを作った。
参照サイトは、3つ。
計算については、
set /a 計算式
説明はここ
文字の切り出しは、ここ。でも、つぎのサイトで解決。
以下をaa.batファイルにコピペする。元はここ
@echo off
set date_tmp=%date:/=%
:dateコマンドの出力をdate_tmpに入れる。C:\>echo %date:20=%で2018/11/16が18/11/16になる。ここでは%date:/=%なので2018/11/16が20181116になる。
参考。
set time_tmp=%time: =0%
echo date_tmp:%date_tmp%
echo time_tmp:%time_tmp%
set yyyy=%date_tmp:~0,4%
set yy=%date_tmp:~2,2%
set mm=%date_tmp:~4,2%
set dd=%date_tmp:~6,2%
set hh=%time_tmp:~0,2%
set mi=%time_tmp:~3,2%
set ss=%time_tmp:~6,2%
set sss=%time_tmp:~9,2%
set datetime=%yyyy%%mm%%dd%%hh%%mi%%ss%%sss%
set /a hh=%1-hh
echo hh:%hh%
set /a hh=hh*60*60
set /a mi=%2-mi
echo mi:%mi%
set /a mi=mi*60
set /a sss=hh+mi
echo %sss%
shutdown /s /f /t %sss%
不要な部分をカットするのと、
07や08と0ゼロから始まる文字列は、8進数と判断する。
0xだと16進数。set /?参照。
だから、
先頭に1を付け加えてから100を引いている。
set /a hh=1%hh%-100
(10時以降ならこの計算式はいらない。気づかんかった。)
aa.bat—————————————
@echo off
set date_tmp=%date:/=%
set time_tmp=%time: =0%
echo date_tmp:%date_tmp%
echo time_tmp:%time_tmp%
set hh=%time_tmp:~0,2%
set mi=%time_tmp:~3,2%
set /a hh=1%hh%-100
set /a hh=%1-hh
echo hh:%hh%
set /a hh=hh*60*60
set /a mi=1%mi%-100
set /a mi=%2-mi
echo mi:%mi%
set /a mi=mi*60
set /a sss=hh+mi
echo %sss%
shutdown /s /f /t %sss%
————————————————–
実行前にa.batですぐにシャットダウンをキャンセルできるようにする。
動作確認でいちいちshutdownを入力するのは面倒だから。
a.bat——————————————
shutdown -a
————————————————-
シャットダウンのキャンセルは、aを入れるだけ。
aa.batの実行は、コマンドプロンプトで以下を入力
aa.bat 17 5
17の前後は半角のスペースが入る。
17と5は、17:05という意味だが、引数はスペースを挟む。
引数は2つ受け取るようになっている。
%1と%2
set /a hh=%1-hhで今の時間から何時間後か計算できる。
set /a mi=%2-miで今の時間
引数以外は、変数は%で囲む。
実行すると以下のような感じだ。
C:\Users\watanabe>aa 17 30
date_tmp:20170820
time_tmp:12:43:44.41
hh:5
mi:-13
17220
17:01マイナス今の時間=17220ミリ秒
昼頃実行したら17220ミリ秒後が17:05
なんでタスクスケジューラーを使わんの?
管理者権限でログインできないPCで使いたかったため。
で、
いつも決まった時間の場合は、引数も含めたバッチファイルを作る。
bb.bat———-
aa.bat 17 20
——————
実行は、bbエンター キー。