バッチファイルに1行書くだけでPCをシャットダウンできます。それだけなら簡単ですが、「30分後に自動シャットダウンしたい」「確認ダイアログを出してからシャットダウンしたい」「業務処理が終わったら自動で再起動したい」となると、知っておくべきことが一気に増えます。
この記事では shutdown コマンドの全オプションを整理したうえで、実務でそのまま使える実践パターンを一通り解説します。スリープ・休止状態の切り替えや、タスクスケジューラを使った定時シャットダウンまでカバーします。
shutdown コマンドの基本構文
shutdown コマンドは Windows に標準搭載されており、バッチファイルから呼び出すだけで PC の電源操作を自動化できます。
shutdown [オプション]
主要オプション一覧
| オプション | 動作 | よく使う組み合わせ |
|---|---|---|
/s |
シャットダウン | /s /t 0 /f |
/r |
再起動 | /r /t 0 /f |
/h |
休止状態(ハイバネーション) | /h(/t /f は使用不可) |
/l |
ログオフ | /l(/t は使用不可) |
/a |
シャットダウンのキャンセル | タイムアウト中のみ有効 |
/hybrid |
シャットダウン後に高速スタートアップを有効にする | /s /hybrid /t 0 |
/t <秒> |
実行までの待機秒数(0〜315360000) | 省略時は 30 秒 |
/f |
起動中のアプリを強制終了 | 未保存データは消えるので注意 |
/c "コメント" |
シャットダウン理由メッセージ(最大512文字) | イベントログに記録される |
/m \\コンピュータ名 |
リモートPCを操作 | 管理者権限が必要 |
/d [p|u:]xx:yy |
シャットダウン理由コード | 主にサーバー管理で使用 |
/t オプションのデフォルトは 30 秒です。/t を省略すると 30 秒後に実行されます。即時実行したい場合は必ず /t 0 を指定してください。
シャットダウン・再起動の基本パターン
即時シャットダウン
最もシンプルな書き方です。/t 0 で待機なし、/f でアプリを強制終了します。
@echo off shutdown /s /t 0 /f
即時再起動
@echo off shutdown /r /t 0 /f
カウントダウン付きシャットダウン
シャットダウンまでの時間をユーザーに知らせたい場合は /t で秒数を指定します。指定した時間内であれば shutdown /a でキャンセルできます。
@echo off echo 60秒後にシャットダウンします。キャンセルするには shutdown /a を実行してください。 shutdown /s /t 60
/t を指定したとき、Windowsのシステムトレイに「シャットダウンする予定」のバルーン通知が表示されます。ユーザーが気づきやすい点で便利です。
ログオフ
@echo off shutdown /l
高速スタートアップを使ったシャットダウン(/hybrid)
/hybrid は「シャットダウン」と「休止状態」を組み合わせた高速スタートアップ用のオプションです。次回起動を速くしたい場合に使います。ただし、BIOS/UEFI アップデートや Windows Update 後は通常の /s でシャットダウンすることをおすすめします。
@echo off rem 高速スタートアップを有効にしてシャットダウン shutdown /s /hybrid /t 0
確認ダイアログを付けてシャットダウンする
誤実行を防ぎたい場合は choice コマンドで Y/N の確認を挟みます。y/n確認による処理分岐の応用です。
@echo off
echo シャットダウンしますか?
choice /c YN /m "[Y]はい [N]いいえ"
if ERRORLEVEL 2 (
echo キャンセルしました。
pause
exit /b 0
)
echo シャットダウンを実行します...
shutdown /s /t 0 /f
choice コマンドは Y を押すと ERRORLEVEL 1、N を押すと ERRORLEVEL 2 を返します。if ERRORLEVEL 2 は「2以上なら」という意味なので、必ず大きい番号から判定します。
特定の時刻になったらシャットダウンする
「22:00 になったら自動シャットダウン」のような時刻指定を実現するには、ループで現在時刻を監視します。
@echo off
set TARGET_TIME=22:00
:WAIT_LOOP
rem 現在時刻の時:分を取得
for /f "tokens=1-2 delims=:" %%a in ("%TIME: =0%") do set NOW=%%a:%%b
if "%NOW%"=="%TARGET_TIME%" (
echo %TARGET_TIME% になりました。シャットダウンします。
shutdown /s /t 30 /f /c "定時自動シャットダウン"
exit /b 0
)
rem 30秒ごとに確認
timeout /t 30 /nobreak >nul
goto WAIT_LOOP
日またぎに注意:このスクリプトは文字列比較で時刻を判定しています。23:50 に起動して 00:00 をターゲットにする場合などは正しく動作しません。深夜をまたぐ場合はタスクスケジューラを使う方法(後述)が確実です。
処理完了後に自動シャットダウンする
バッチ処理が終わったら自動でシャットダウンする、というパターンです。処理の成否によって動作を変えることもできます。
@echo off
echo バックアップ処理を開始します...
rem ここに業務処理を記載
robocopy "D:\data" "E:\backup" /mir /r:3 /w:5 /log:"backup.log"
if ERRORLEVEL 8 (
echo [ERROR] バックアップに失敗しました。シャットダウンをスキップします。
pause
exit /b 1
)
echo バックアップが完了しました。60秒後にシャットダウンします。
shutdown /s /t 60 /f /c "バックアップ完了による自動シャットダウン"
robocopy の ERRORLEVEL は特殊で、8 以上がエラーです(1〜7はコピーは成功、8以上は失敗を意味します)。コマンドによって ERRORLEVEL の意味が違うので注意してください。
シャットダウン前にログを記録する
自動シャットダウンを運用する場合、「いつシャットダウンしたか」の記録を残しておくと障害調査に役立ちます。
@echo off setlocal set LOG=C:\logs\shutdown_log.txt rem ログフォルダがなければ作成 if not exist "C:\logs" mkdir "C:\logs" rem シャットダウン実行とログ記録 echo %DATE% %TIME% - 自動シャットダウンを実行しました >> "%LOG%" shutdown /s /t 10 /f /c "自動シャットダウン(ログ記録済み)"
スリープ・休止状態に切り替える
スリープ(スタンバイ)
shutdown コマンドにはスリープオプションがありません。スリープには rundll32.exe を使います。
@echo off rem スリープ(スタンバイ)に移行 rundll32.exe powrprof.dll,SetSuspendState 0,1,0
引数の意味:SetSuspendState ハイバネート, 強制, 起動禁止 です。0,1,0 で「ハイバネートなし(スリープ)、強制、起動イベントを禁止しない」となります。
休止状態(ハイバネーション)
休止状態には shutdown /h を使います。なお、休止状態が無効な環境では動作しません。
@echo off rem 休止状態に移行 shutdown /h
powercfg /h on
スリープと休止状態の違い:スリープはメモリに状態を保持してすぐ復帰できます。休止状態はメモリの内容をディスクに書き込み、電源を完全にオフにします。停電があっても状態を復元できるのが休止状態の特徴です。
シャットダウンをキャンセルする
/t で待機中のシャットダウンはキャンセルできます。誤って実行したときや、監視ループでキャンセル条件に入ったときに使います。
@echo off
shutdown /a
if ERRORLEVEL 1 (
echo キャンセルできる保留中のシャットダウンがありません。
) else (
echo シャットダウンをキャンセルしました。
)
リモート PC をシャットダウンする
同一ネットワーク上のPCをリモートでシャットダウンできます。管理者権限と対象PCでのリモートシャットダウン許可が必要です。
@echo off rem リモートPCをシャットダウン(管理者権限が必要) shutdown /m \\SERVER01 /s /t 0 /f /c "リモートメンテナンス"
@echo off
setlocal
rem シャットダウン対象PCリスト
set TARGETS=PC001 PC002 PC003 PC004
for %%p in (%TARGETS%) do (
echo %%p をシャットダウン中...
shutdown /m \\%%p /s /t 60 /f /c "業務終了後自動シャットダウン"
if ERRORLEVEL 1 (
echo [WARN] %%p へのシャットダウン命令に失敗しました。
) else (
echo [OK] %%p にシャットダウン命令を送信しました。
)
)
echo すべての対象PCにシャットダウン命令を送信しました。
pause
リモートシャットダウンの前提条件:①対象PCで「リモートからのシャットダウン」をファイアウォールで許可、②対象PCで管理者アカウントが共有されている(ドメイン環境を推奨)。ワークグループ環境ではレジストリの LocalAccountTokenFilterPolicy 設定も必要な場合があります。
タスクスケジューラで定時シャットダウンを設定する
schtasks コマンドを使えば、バッチファイルなしで直接タスクを登録できます。毎日同じ時刻にシャットダウンしたい場合はこちらが確実です。
rem 毎日 23:00 にシャットダウンするタスクを登録 schtasks /create /tn "定時シャットダウン" /tr "shutdown /s /t 0 /f" /sc daily /st 23:00 /ru SYSTEM /f rem 登録確認 schtasks /query /tn "定時シャットダウン" rem タスクを削除するには rem schtasks /delete /tn "定時シャットダウン" /f
また、バッチファイル自身がタスクを登録してシャットダウンを予約する方法は、タスクスケジューラ自動登録のガイドをあわせて参照してください。
起動時・ログイン時にシャットダウンスケジュールを設定する
PC 起動・ログイン時の自動実行と組み合わせれば、「ログインしたら XX 時間後に自動シャットダウンをセットする」という使い方もできます。
@echo off rem 起動後8時間(28800秒)後にシャットダウン予約 shutdown /s /t 28800 /f /c "8時間経過による自動シャットダウン" echo 8時間後に自動シャットダウンが設定されました。 echo キャンセルするには: shutdown /a
プロセスの終了を待ってからシャットダウンする
バックアップや長時間処理が終わったことを確認してシャットダウンしたい場合は、プロセスの終了を待つ方法と組み合わせます。
@echo off
setlocal
set TARGET_PROC=backup.exe
echo %TARGET_PROC% の終了を待機中...
:WAIT_PROC
tasklist /fi "imagename eq %TARGET_PROC%" 2>nul | find /i "%TARGET_PROC%" >nul
if %ERRORLEVEL%==0 (
timeout /t 30 /nobreak >nul
goto WAIT_PROC
)
echo %TARGET_PROC% が終了しました。シャットダウンします。
shutdown /s /t 60 /f /c "バックアップ完了"
管理者権限が必要な場合の対処
リモートシャットダウンや一部の電源操作は管理者権限が必要です。管理者権限の自動取得の方法と組み合わせて使ってください。
@echo off
rem 管理者権限チェック
net session >nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] 管理者権限が必要です。
echo このスクリプトを右クリックして「管理者として実行」してください。
pause
exit /b 1
)
echo 管理者権限を確認しました。シャットダウンを実行します。
shutdown /s /t 0 /f
よくあるトラブルと対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
| シャットダウンされない(何も起きない) | /t を省略して30秒待機中、またはコマンドが実行されていない | /t 0 を追加する。タスクスケジューラからの実行の場合は権限設定を見直す |
| アプリが閉じずに処理が止まる | 未保存ダイアログが表示されている | /f を追加して強制終了する |
| リモートPCに接続できない | ファイアウォールがブロック、またはネットワーク経路の問題 | Windows ファイアウォールで「リモートシャットダウン」を許可する。ping で疎通確認をする |
| shutdown /h が実行できない | 休止状態が無効になっている | 管理者権限で powercfg /h on を実行する |
| shutdown /a でキャンセルできない | /t 0 で即時実行してしまっている | /t に数秒以上を指定してキャンセル可能にする |
| タスクスケジューラから動作しない | 権限不足または作業フォルダの問題 | 「最上位の特権で実行」を有効にする。実行アカウントに管理者権限があるか確認する |
| /hybrid でシャットダウンしたのに次回起動が遅い | SSD でないとハイブリッドシャットダウンの効果が出にくい | 通常の /s を使う。または BIOS 設定で Fast Boot を有効にする |
まとめ
shutdown コマンドの主要パターンを整理します。
| やりたいこと | コマンド | ポイント |
|---|---|---|
| 今すぐシャットダウン | shutdown /s /t 0 /f |
/t 0 で即時、/f で強制終了 |
| 今すぐ再起動 | shutdown /r /t 0 /f |
– |
| N秒後にシャットダウン | shutdown /s /t N |
バルーン通知が表示される |
| シャットダウンをキャンセル | shutdown /a |
/t が 0 より大きい場合のみ有効 |
| スリープ | rundll32.exe powrprof.dll,SetSuspendState 0,1,0 |
メモリ保持・高速復帰 |
| 休止状態 | shutdown /h |
電源オフ・停電に強い |
| ログオフ | shutdown /l |
PCはそのまま |
| リモートPCをシャットダウン | shutdown /m \\PC名 /s /t 0 /f |
管理者権限・FW許可が必要 |
| 高速スタートアップ付きシャットダウン | shutdown /s /hybrid /t 0 |
次回起動を高速化 |
タスクスケジューラと組み合わせれば、完全無人での電源管理も実現できます。用途に合わせてパターンを使い分けてください。

