指定した時刻にパソコンを落とすスクリプト
指定した時刻にパソコンの電源を落とすスクリプトです。JScriptなんか久しぶりに書いた。そろそろ仕事も始まりそうなので、気持ち丁寧に書きました。
// shutdownAt.js // 指定した時刻にパソコンの電源を落とす。 // 使用方法: // cscript shutdownAt.js 8:30 // date1とdate2の間隔を、秒を単位として返す。 function getSecsDiff(date1, date2) { var diffInMillisecs = 0; if(date1 < date2) { diffInMillisecs = date2 - date1; } else { diffInMillisecs = date1 - date2; } return Math.floor(diffInMillisecs / 1000); } // パラメータdateと、現在時刻を比較する。 // dateが過去を表わしている時、trueを返し、 // 現在〜未来を表わしているとき、falseを返す。 function isPast(date) { return date < new Date(); } // コマンドライン引数から、Dateオブジェクトを作る。 // このメソッドでは値の検証はしない。事前にチェックが必要。 function parseArgs() { var regex = /([0-9]{1,2}):([0-9]{1,2})/; var param = WScript.Arguments.Item(0); var result = regex.exec(param); var hour = parseInt(result[1]); var minute = parseInt(result[2]); var ret = new Date(); ret.setHours(hour); ret.setMinutes(minute); return ret; } // コマンドライン引数の検証をする。 // 妥当であればtrueを返し、そうでなければfalseを返す。 function validateArgs() { var args = WScript.Arguments; // パラメータの個数を検証 if(1 !== args.length) { return false; } // パラメータのフォーマットを検証 var regex = /([0-9]{1,2}):([0-9]{1,2})/; if(!regex.test(args.Item(0))) { return false; } var matched = regex.exec(args.Item(0)); // 時刻の値の範囲を検証 var hour = parseInt(matched[1]); if(hour < 0 || 23 < hour) { return false; } // 分の値の範囲を検証 var minutes = parseInt(matched[2]); if(minutes < 0 || 59 < minutes) { return false; } return true; } // メインメソッド。 function main() { if(!validateArgs()) { WScript.Echo("usage(ex): cscript shutdownAt.js 8:30"); } var shutdownAt = parseArgs(); if(isPast(shutdownAt)) { // 翌日を設定する。2010-12-32は、2011-1-1となることを確認済み。 shutdownAt.setDate(shutdownAt.getDate() + 1); } var diffSecs = getSecsDiff(new Date(), shutdownAt); WScript.CreateObject("WScript.Shell").Exec("shutdown -s -t " + diffSecs); } main();