Windowsコマンドプロンプトで指定時間に自動シャットダウン・再起動を実行する方法

Windowsを使用していると、深夜にPCの電源を切ったり、メンテナンスのために再起動したりしたい場合があります。この記事では、コマンドプロンプトのshutdownコマンドによるタイマー設定と、タスクスケジューラで日時を指定する方法を説明します。

「今から1時間後」と「今日の23:00」は別の指定です。前者は/tに秒数を渡し、後者はタスクスケジューラのトリガーに日付と時刻を設定します。/t 2300は23:00ではなく、実行から2,300秒後です。

実行前に、作業を保存してアプリを閉じてください。以下の停止・再起動コマンドは説明用の表示ではなく、入力すると実際にPCを停止・再起動するものです。バックアップ、ファイル転送、更新処理、ほかの利用者の作業がないことも確認します。特に/tが0より大きい場合は、/fを書かなくても強制終了扱いになる点に注意してください。

目次

自動シャットダウンコマンドの基本構文

ローカルPCをシャットダウンする指定は/sです。まず、待ち時間のない指定と、待ち時間を付ける指定を分けて確認します。

待ち時間なしでシャットダウンする場合

次のコマンドは直ちにシャットダウンを開始します。動作確認のつもりで実行しないでください。明示的な強制終了は要求しませんが、データの保存を保証するものではありません。

shutdown /s /t 0

主なオプション

  • /s:シャットダウンを要求します。
  • /r:シャットダウン後に再起動します。
  • /t 秒数:実行してから待つ秒数です。有効範囲は0〜315360000、既定値は30秒です。省略せず意図した値を指定しましょう。
  • /f:実行中のアプリを警告なしで強制終了させる指定です。未保存データを失うおそれがあるため、通常の例には付けません。ただし、/tが0より大きければ、/fは暗黙に適用されます。
  • /a:待機時間内に、保留中のシャットダウンまたは再起動を取り消す指定です。別のコマンドとして実行します。

仕様はMicrosoft Learnのshutdownコマンド解説を参照してください。/t 0かつ/fなしの場合でも、開いているアプリをあらかじめ保存・終了することが基本です。アプリが終了を妨げれば、指定どおりに完了しないことがあります。

1時間後にシャットダウンする例

保存と終了の準備を済ませ、1時間後に強制終了が発生し得ることを了承できる場合の例です。1時間は60 × 60 = 3600秒です。

shutdown /s /t 3600

この指定は「今から3,600秒後」であり、毎日同じ時刻に実行する予約ではありません。/fが見当たらなくても、待機時間が0より大きいため未保存データを失う可能性があります。待機中に新しい作業を始める場合も、期限までに保存してください。

指定時間後に自動シャットダウンを設定する手順

コマンドプロンプトを開く

  1. スタートメニューで「cmd」を検索し、コマンドプロンプトを開きます。
  2. 対象PCと利用者を確認し、作業を保存して終了します。
  3. 1時間後なら上記のshutdown /s /t 3600を入力します。
  4. 表示された通知やエラーを確認し、自分でも実行時刻と待ち時間を把握しておきます。通知の有無だけで、予定どおりに完了すると判断しないでください。

ローカルPCの停止には「システムのシャットダウン」というユーザー権利が必要です。常に管理者として起動しなければならない、という意味ではありません。権利の割り当ては端末や組織のポリシーに依存します。権限エラーが出た場合は、管理者の指示を確認し、安易にポリシーや実行アカウントを変更しないでください。Microsoftのユーザー権利の説明も参考になります。

待機中のシャットダウンをキャンセルする

待ち時間が残っている間に、新しいコマンドプロンプトを開き、次のコマンドを単独で実行します。

shutdown /a

取り消せるのは、タイムアウト待ちの処理です。すでに終了処理に進んだPCを元に戻すコマンドではなく、/t 0には取り消すための待ち時間がありません。また、タスクスケジューラに登録した将来の予約は、この操作では無効になりません。

自動再起動コマンドの基本構文

再起動には/rを使います。待ち時間、強制終了、取り消しの注意点はシャットダウンと同じです。

待ち時間なしで再起動する場合

次のコマンドは直ちに再起動を開始します。保存と終了の準備ができたときだけ使用してください。/fを指定しなくても、保存が自動的に保証されるわけではありません。

shutdown /r /t 0

30分後に再起動する例

30分は30 × 60 = 1800秒です。この例も/tが0より大きいため、/fが暗黙に適用され、未保存データが失われるおそれがあります。

shutdown /r /t 1800

「30分後に再起動を要求する」指定です。再起動後に利用可能になるまでの時間や、更新処理の終了時刻を保証するものではありません。

指定時間後に自動再起動を設定する手順

  1. 保存していないファイル、実行中の処理、ほかの利用者への影響を確認します。
  2. コマンドプロンプトを開き、30分後なら上記のshutdown /r /t 1800を入力します。
  3. 通知やエラーを確認します。権限が不足する場合は、必要なユーザー権利と実行アカウントを確認します。
  4. 取り消す場合は待機時間内に、新しいコマンドプロンプトでshutdown /aを実行します。

シャットダウン用と再起動用のタイマーを続けて投入しないでください。予定を変更するときは、現在の保留中の処理を取り消せたことを確認してから、新しい指定を行います。待機時間の終了直前に取り消しが間に合うとは限らないため、余裕を持って判断します。

タスクスケジューラを使った自動シャットダウン・再起動

「指定した日の23:00」や「毎日23:00」のような日時・繰り返しの予約には、タスクスケジューラを使います。ここでは、自分がログオン中のPCで、指定した将来の日時に一度だけ実行する例を説明します。画面の項目名はWindowsの表示言語やバージョンによって異なる場合があります。

1. タスクスケジューラを開いて名前を付ける

  1. スタートメニューで「タスクスケジューラ」を検索して開き、「タスクの作成」を選びます。
  2. 「全般」で、用途が分かる名前を付けます。例:自動シャットダウン。
  3. 実行するユーザーアカウントを確認します。この例では「ユーザーがログオンしているときのみ実行する」を選ぶため、ログオフ中には実行されません。
  4. 「最上位の特権で実行する」は一律に有効化せず、必要な権利と運用上の理由がある場合だけ管理者と検討します。

2. トリガーに日付と時刻を設定する

  1. 「トリガー」タブで「新規」を選び、タスクの開始条件を「スケジュールに従う」にします。
  2. 最初は「1回」を選び、十分に余裕のある将来の日付と時刻を入力します。23:00を設定する場合も、対象の日付を確認してください。
  3. PCの現在時刻とタイムゾーンを確認します。「毎日」などの繰り返しを使う場合は、毎回ほかの作業を妨げないことを確認します。
  4. 設定内容を確認し終えるまでは、トリガーの「有効」のチェックを外しておくと、編集中の意図しない起動を避けられます。

時刻を指定する仕組みはMicrosoftの時刻トリガーの例でも説明されています。トリガーは処理を開始する条件であり、PCが使える状態でなければその時刻の実行は保証されません。

3. 実行ファイルと引数を別々に入力する

「操作」タブで「新規」を選び、「プログラムの開始」を設定します。「プログラム/スクリプト」欄に、オプションを含むコマンド全体を入れないでください。シャットダウンの場合は次のように分けます。

  • プログラム/スクリプト:%SystemRoot%\System32\shutdown.exe
  • 引数の追加:/s /t 0
  • 開始(オプション):空欄

再起動を予約する場合は、実行ファイルはそのままにして、引数を/r /t 0へ変更します。両方を一つのタスクの操作に追加するのではなく、目的に合う方を一つだけ設定してください。パスと引数はMicrosoftのExecAction仕様でも別の項目です。

この例では、日時までの待機をタスクスケジューラに任せ、起動時のshutdownには/t 0を指定します。/fは付けません。アプリの状態によっては完了しないことがあり、起動後に/aで取り消す猶予もありません。実行時刻より前に保存・終了を済ませてください。

4. 条件と設定を確認する

  • 「条件」でアイドル状態、AC電源、スリープ解除などの条件を確認します。必要な条件を満たさなければ実行されないため、単に時刻を入れるだけでは不十分です。
  • この例では、取り逃した予約が後から突然実行されるのを防ぐため、「スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する」は有効にしません。後追い実行が必要な運用では、許容できる時間帯を別途検討します。
  • 停止・再起動タスクの失敗時の自動再試行や、短い間隔の繰り返しは設定しません。予想外の時刻の停止や繰り返し再起動につながるためです。まず失敗の原因を調べます。
  • 必要なスリープ解除設定があっても、すべての電源状態で指定時刻に実行できると考えないでください。端末の電源管理や組織の運用を確認します。

これらは誤動作の影響を抑えるための設定方針です。条件、取り逃し時の実行、再試行、スリープ解除はMicrosoftのTaskSettings仕様で区別されています。

5. 保存前後に設定を確認する

名前、実行アカウント、日付・時刻、操作、条件を確認して保存します。動作確認が必要なら、別のテスト用タスクでメモ帳などの無害なプログラムを起動して、スケジュールと実行アカウントを確認します。本番の停止・再起動タスクを「実行」して試すと、予定時刻を待たずにPCが停止します。

内容の確認が済んだら、本番のトリガーを有効にして保存し、「次回の実行時刻」が意図した日時か確認します。次のコマンドは、ルートフォルダーに作成した「自動シャットダウン」タスクの情報を表示するだけで、実行はしません。別の名前やフォルダーで作成した場合は、その正確な名前に置き換えます。

schtasks /query /tn "\自動シャットダウン" /fo LIST /v

読み取り用の構文はMicrosoft Learnのschtasks queryを参照してください。タスクの成功表示は、アプリの保存やPCの停止完了まで証明するものではありません。

6. 予約をキャンセルする

まだ実行されていない予約を止めるには、タスクスケジューラのライブラリで自分が作成した対象タスクを選び、「無効」にします。日時が近いときは、すでに処理が開始されていないかにも注意してください。不要な予約を残さないよう、繰り返しの有無も確認します。

タスクの無効化とshutdown /aは別の操作です。無効化は将来の起動を止めるもので、すでに起動したタイマーを取り消すものではありません。逆に/aで待機中のタイマーを止めても、次回のタスク予約は残ります。Microsoft Learnのタスク変更・無効化の説明も参考にしてください。

応用例:条件を確認してからシャットダウン・再起動を判断する

アプリの終了、通信エラー、ディスク容量不足をきっかけに、自動化したい場合もあります。しかし、検査の失敗を「停止してよい」と解釈するスクリプトは危険です。以下は状態を一度だけ確認する診断例です。シャットダウン、再起動、ファイル削除は行いません。

特定のアプリケーションの状態を確認する

コマンドプロンプトで、対象の実行ファイル名に置き換えて確認します。

tasklist /FI "IMAGENAME eq your_application.exe" /FO TABLE

tasklistは実行中のプロセスを表示するコマンドです。該当プロセスが見つからないことは、作業が正常に終わったことの証明ではありません。クラッシュ、名前の間違い、検査エラーなども切り分け、アプリ側の完了表示や出力ファイルを確認します。tasklistの公式仕様ではIMAGENAMEによる絞り込みが説明されています。

特に、tasklist | findの後で「一致なしなら停止」と判定すると、前段の取得失敗まで停止条件として扱うおそれがあります。エラー出力を隠さず、正常完了・異常終了・取得失敗を区別してください。

ネットワークの状態を確認する

まず、設定を変更しない次の表示コマンドで、接続中のアダプターとデフォルトゲートウェイを確認します。

ipconfig

ゲートウェイが192.168.1.1だった場合に、4回だけ応答を確認する例です。このIPアドレスは例なので、自分の環境で確認した対象に置き換えてください。

ping /n 4 192.168.1.1

pingは指定先へのICMP応答を調べます。単発の失敗や応答がないことだけで「PCを再起動すべき」とは判断できません。相手側の応答設定、経路、一時的な通信不良などを調べます。ゲートウェイへの応答成功も、インターネット全体の正常性を保証しません。詳しくはipconfigとpingの公式解説を参照してください。

ディスク使用率を確認して警告を表示する

以下はコマンドプロンプトのバッチ構文ではなく、PowerShellで実行する例です。Cドライブの値を取得し、容量使用率が90%以上なら警告を表示します。停止も削除も行わず、取得に失敗した場合はエラーを表示します。

try {
    $drive = Get-PSDrive -Name C -PSProvider FileSystem -ErrorAction Stop
    $used = $drive.Used
    $free = $drive.Free
    if ($null -eq $used -or $null -eq $free) {
        throw 'Disk capacity is unavailable.'
    }
    $total = [double]$used + [double]$free
    if ($used -lt 0 -or $free -lt 0 -or $total -le 0) {
        throw 'Disk capacity is invalid.'
    }
    $percent = 100.0 * $used / $total
    '{0}: Used={1:N1}% Free={2:N2} GiB' -f $drive.Name, $percent, ($free / 1GB)
    if ($percent -ge 90) {
        Write-Warning 'Disk usage is at least 90%. Review the cause and available space.'
    }
} catch {
    Write-Error "Could not read disk usage: $($_.Exception.Message)"
}

UsedとFreeから計算する容量の使用率であり、タスクマネージャーのディスクの稼働率とは別です。90%はこの例の警告基準で、Windowsが必ず停止すべき境界ではありません。空き容量の絶対量や増加の原因を確認してから対応します。Cは対象ドライブ名に変更できます。Get-PSDriveの公式解説も参考にしてください。

将来これらを自動化する場合も、まずは記録や通知だけにとどめ、状態が不明なときは停止処理に進まない設計にします。プロセスが消えた、通信に一度失敗した、容量が閾値を超えた、という理由だけで強制停止する監視ループにはしないでください。

トラブルシューティングとよくある問題

シャットダウン・再起動が予定どおりに実行されない

「何秒後」のタイマーと「何月何日何時」のタスクを混同していないかを確認します。コマンドのエラー、入力した秒数、タスクの次回実行時刻、ログオン条件、電源・アイドル条件を順に確認してください。タイムアウトを繰り返し投入したり、失敗時の再試行を増やしたりして様子を見るのは避けます。

権限エラーになる

コマンドを実行するアカウントと、タスクの実行アカウントは同じとは限りません。必要なユーザー権利が割り当てられているかを管理者に確認します。「管理者として実行」や「最上位の特権」を無条件に使う説明にはせず、最小限の権限で運用します。

タスクスケジューラのタスクが動作しない

タスクとトリガーが有効か、実行ファイルのパスと引数が別々か、アカウントと条件が適切かを確認します。利用できる場合はタスクの履歴と「前回の実行結果」を読み、エラーを調べます。無害なテスト用タスクで切り分け、本番の停止タスクを何度も手動実行しないでください。

キャンセルできない

将来のタスク予約を止めたいのか、すでに始まった待機中のタイマーを止めたいのかを分けて確認します。前者はタスクの無効化、後者は待機時間内のshutdown /aです。/t 0や待機時間終了後の終了処理を、/aで確実に戻せると考えないでください。

アプリがシャットダウンを妨げる

未保存の作業や、アプリの終了確認が残っていないかを調べ、保存して正常に閉じます。停止できないことへの対処として、まず/fを追加するのではなく、原因を確認してください。Windowsアプリは終了を妨げる理由を提示する場合があり、Microsoftのシャットダウン通知の説明でもこの仕組みが説明されています。

まとめ

「今から何秒後」はshutdownの/t、日時や繰り返しの指定はタスクスケジューラ、と使い分けます。/tが0より大きいと強制終了扱いになること、/aが取り消せるのは待機中のタイマーだけであることを押さえましょう。

指定日時のタスクでは実行ファイルと引数を分け、不要な自動再試行や後追い実行を避けます。状態監視は診断・警告から始め、データの保存と作業への影響を確認したうえで停止・再起動を行ってください。

確認範囲:Microsoftの公式資料との照合とコードの静的確認を行っています。Windows実機でのシャットダウン・再起動、タスク登録や実行の動作確認は行っていません。利用する環境のポリシーや電源管理による違いは、無害なテストで確認してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次