シャットダウンタイマー – 指定された時間にシャットダウン(キャンセル機能あり)

未分類

我が家のデスクトップPCで、大容量のファイルコピーやバックアップ作業等で、「だいたいあと2時間くらいでバックアップ終わりそうだけどもう深夜だなー」「明日の朝までPCを放っておくの電気代もったいないなー」と思います。

しかし、タスクスケジューラやコマンドプロンプトでシャットダウンを予約するのは少し面倒。

生成AIの力を借りてシャットダウンタイマーのVBスクリプト書きました。以下どうぞ。

shutdown_timer.vbs

Option Explicit

' シャットダウンタイマースクリプト(キャンセル機能付き)
Dim inputTime, targetTime, currentTime
Dim wshShell_1, wshShell_2, objFSO
Dim homePath, cancelFilePath

' キャンセル用フラグファイルのパスを設定
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set wshShell_2 = CreateObject("WScript.Shell")
homePath = wshShell_2.ExpandEnvironmentStrings("%USERPROFILE%") ' または %HOMEPATH%
cancelFilePath = homePath & "\Desktop\shutdown_cancel"

' シャットダウンする時刻を入力(形式:HH:MM)
inputTime = InputBox("シャットダウンする時刻を入力してください(例:01:50)", "シャットダウンタイマー")

If inputTime = "" Then
    WScript.Quit
End If

' 現在時刻を取得
currentTime = Time
' 目標時刻を設定
targetTime = TimeValue(inputTime)

' 目標時刻が現在時刻より前の場合、翌日の時刻として処理
If targetTime < currentTime Then
    targetTime = targetTime + 1
End If

' 待機時間を計算(秒単位)
Dim waitSeconds
waitSeconds = DateDiff("s", currentTime, targetTime)

' WShellオブジェクトを作成
Set wshShell_1 = CreateObject("WScript.Shell")

' 確認メッセージを表示
If MsgBox("コンピューターは次回の " & inputTime & " にシャットダウンされます。" & vbCrLf & _
          "よろしいですか?" & vbCrLf & vbCrLf & _
          "※キャンセルするには以下のファイルを削除してください:" & vbCrLf & _
          cancelFilePath, vbYesNo + vbQuestion, "確認") = vbNo Then
    WScript.Quit
End If

' キャンセル用フラグファイルを作成
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(cancelFilePath) Then
    objFSO.CreateTextFile(cancelFilePath)
End If

' 待機中にキャンセルファイルの存在を確認
Dim sleepInterval : sleepInterval = 1000 ' 1秒ごとにチェック
Dim totalWaited : totalWaited = 0

Do While totalWaited < waitSeconds * 1000
    If Not objFSO.FileExists(cancelFilePath) Then
        MsgBox "シャットダウンがキャンセルされました。", vbInformation, "キャンセル"
        WScript.Quit
    End If
    WScript.Sleep sleepInterval
    totalWaited = totalWaited + sleepInterval
Loop

' キャンセルファイルを削除
If objFSO.FileExists(cancelFilePath) Then
    objFSO.DeleteFile cancelFilePath
End If

' シャットダウンを実行
wshShell_1.Run "shutdown /s /t 0", 0, True

Set wshShell_1 = Nothing
Set objFSO = Nothing


使い方

shutdown_timer.vbs を実行し、時刻をHH:MMの形式で入力してください。

(例として04:30だと次回の午前4時30分にシャットダウン実行予定)


確認メッセージとキャンセルファイルの場所が表示されます。キャンセルファイルはデスクトップに生成され、これを削除するとシャットダウン予定が削除されます。


(shutdown_cancelファイルを削除すると以下の画面になり、シャットダウンタイマーがキャンセルされます。)

コメント

タイトルとURLをコピーしました