【bat】bcdeditコマンド完全ガイド|デュアルブート設定・セーフモード・起動タイムアウト・ブートエントリをバッチで管理する

【bat】bcdeditコマンド完全ガイド|デュアルブート設定・セーフモード・起動タイムアウト・ブートエントリをバッチで管理する bat

「Windowsにセーフモードで自動起動させてメンテナンスしたい」「デュアルブート環境のデフォルトOSをコマンドで切り替えたい」——こういったブート設定の自動化を実現するのが bcdedit(ビーシーディーエディット)コマンドです。Windows Vista以降に搭載されており、Windows起動を制御するBCD(Boot Configuration Data)ストアをコマンドラインから完全に操作できます。

本記事では、bcdeditの基本構文からブートエントリの確認・作成・削除・変更、デフォルトOS設定、セーフモードの自動設定・解除、ブート設定のバックアップと復元、UEFI環境での注意点、回復環境からの操作まで、実際に動作するバッチスクリプトを使って徹底解説します。

bcdeditの誤操作はPCが起動できなくなる原因になります
BCDの変更は誤操作するとWindowsが起動しなくなる非常にリスクの高い操作です。本記事のスクリプトを実行する前に必ず bcdedit /export でバックアップを取ってください。また、すべての操作に管理者権限が必要です。

本記事で分かること

  • bcdeditの基本構文とサブコマンド一覧
  • ブートエントリの確認・作成・削除・複製
  • デフォルト起動OSの変更とタイムアウト設定
  • セーフモードの自動設定と解除スクリプト
  • デュアルブート環境の管理方法
  • ブート設定のエクスポート・インポートによるバックアップ
  • テスト署名・デバッグモード・メモリ/CPU制限の設定
  • UEFI環境と回復環境(WinRE)からの操作方法
スポンサーリンク
  1. BCDとbcdeditとは
  2. bcdeditの基本構文とサブコマンド一覧
  3. ブートエントリの確認(/enum)
    1. すべてのエントリを表示する
    2. ブートエントリをバッチで取得して変数に格納する
  4. ブートエントリの設定変更(/set)
    1. エントリの表示名を変更する
    2. メモリ使用量を制限する(トラブルシューティング用)
    3. 使用するCPU数を制限する
  5. デフォルトOSとタイムアウトの設定
    1. ブートタイムアウトの変更(/timeout)
    2. デフォルト起動エントリの変更(/default)
    3. ブートメニューの表示順序を設定する(/displayorder)
    4. 次回起動時のみ別エントリで起動する(/bootsequence)
  6. セーフモードの自動設定と解除
    1. セーフモードを有効化する
    2. セーフモードを解除して通常起動に戻す
    3. メンテナンス後に自動で通常モードに戻すパターン
  7. ブート設定のバックアップと復元(/export・/import)
  8. ブートエントリの作成・複製・削除
    1. デュアルブート用エントリを追加する
    2. ブートエントリを削除する
    3. 診断用のブートエントリを追加する(VGAモード)
  9. テスト署名・デバッグモード・ブートログの設定
    1. テスト署名モードの有効化
    2. ブートログを有効化する
  10. UEFI環境でのbcdedit使用上の注意
  11. Windows回復環境(WinRE)からのbcdedit操作
    1. 回復環境へのアクセス方法
    2. 回復環境での基本的な修復コマンド
  12. 実践パターン:バッチでブート設定を自動管理する
    1. パターン①:定期メンテナンスをセーフモードで完全自動化
    2. パターン②:BCD設定を定期バックアップする
    3. パターン③:現在のBCD設定をレポートとして保存する
    4. パターン④:デュアルブート環境をコマンドで切り替える
    5. パターン⑤:セーフモードの現在の状態を確認するスクリプト
    6. パターン⑥:展開後の複数PCにBCD設定を一括適用する
    7. パターン⑦:大量PCのセーフモードを一括解除する
  13. bcdeditでよく発生するエラーと対処法
    1. エラー①:「システムで正しく起動できませんでした」で起動不能になった
    2. エラー②:「指定された識別子が見つかりませんでした」
    3. エラー③:「要求された操作は、制限されています」
    4. エラー④:「指定された値の型は指定されたエントリには無効です」
    5. エラー⑤:bcdedit /import 後に起動しない
    6. エラー⑥:セーフモードを有効にしたが通常に戻せない
  14. よくある質問
  15. まとめ

BCDとbcdeditとは

BCD(Boot Configuration Data)はWindowsの起動に必要な情報を管理するデータベースです。Windows XP以前は boot.ini というテキストファイルで管理していましたが、Vista以降はBCDストアという専用データベース形式に変わりました。bcdeditはこのBCDストアを編集するための公式コマンドラインツールです。

項目 Windows XP以前 Windows Vista以降
ブート設定ファイル C:\boot.ini(テキスト) BCD ストア(バイナリDB)
編集ツール テキストエディタ / bootcfg bcdedit(コマンドライン)
格納場所(BIOS) C:\boot.ini \Boot\BCD(システム予約パーティション)
格納場所(UEFI) EFI\Microsoft\Boot\BCD(ESP)
UEFI対応 × ○(EFIシステムパーティション内)
バックアップ方法 ファイルコピー bcdedit /export [ファイル名]

bcdeditが特に必要になる場面は、デュアルブート環境のOS切り替え自動化定期メンテナンス時のセーフモード起動展開作業後のブート設定の一括適用などです。

bcdeditの基本構文とサブコマンド一覧

基本構文
bcdedit [/store BCDファイル] [サブコマンド] [引数]
サブコマンド 説明
/enum BCDエントリを一覧表示。引数なしで起動可能なエントリを表示
/set エントリの特定の設定値を変更する
/deletevalue エントリの特定の設定値を削除する
/create 新しいブートエントリを作成する
/delete ブートエントリを削除する
/copy 既存のブートエントリをコピーして新しいエントリを作成
/export BCDストア全体をファイルにエクスポート(バックアップ)
/import エクスポートファイルからBCDストアを復元
/default デフォルトで起動するエントリを設定
/timeout ブートメニューのタイムアウト秒数を設定
/bootsequence 次回起動時のみ有効な一時的な起動順序を設定
/displayorder ブートメニューの表示順序を設定
/dbgsettings カーネルデバッグの設定を表示・変更
/debug 特定のエントリのカーネルデバッグを有効化・無効化
/store 操作対象のBCDストアを指定(オフラインBCD編集)

よく使うGUID識別子

  • {current}: 現在実行中のWindows
  • {default}: デフォルト起動エントリ
  • {bootmgr}: Windowsブートマネージャー
  • {fwbootmgr}: ファームウェア(UEFI)ブートマネージャー
  • {memdiag}: Windowsメモリ診断
  • {ntldr}: 旧Windows(XP以前)のローダー

ブートエントリの確認(/enum)

bcdedit /enum でBCDストアに登録されているすべてのブートエントリを表示できます。

ブートエントリの確認
bcdedit /enum

:: 出力例(シングルブート):
:: Windows ブート マネージャー
:: --------------------------------
:: identifier              {bootmgr}
:: device                  partition=\Device\HarddiskVolume1
:: description             Windows Boot Manager
:: locale                  ja-JP
:: default                 {current}
:: timeout                 30
::
:: Windows ブート ローダー
:: --------------------------------
:: identifier              {current}
:: device                  partition=C:
:: path                    \Windows\system32\winload.exe
:: description             Windows 11
:: locale                  ja-JP
:: osdevice                partition=C:
:: systemroot              \Windows

すべてのエントリを表示する

全エントリの表示
bcdedit /enum all

:: /enum all でファームウェアブートマネージャーや
:: メモリ診断なども含めて表示される

ブートエントリをバッチで取得して変数に格納する

現在のOS GUIDを取得
@echo off
setlocal enabledelayedexpansion

:: 現在のエントリのGUIDを取得
for /f "tokens=2 delims={}" %%A in ('bcdedit /enum ^| findstr /i "^identifier"') do (
    set "GUID={%%A}"
)

echo 現在のエントリGUID: !GUID!

endlocal

ブートエントリの設定変更(/set)

bcdedit /set は特定のブートエントリの設定値を変更するコマンドです。書式は bcdedit /set [identifier] [datatype] [value] です。

データタイプ 説明 値の例
description ブートメニューに表示されるOS名 “Windows 11 Pro”
path OSローダーのパス \Windows\system32\winload.exe
osdevice OSが入っているドライブ partition=C:
safeboot セーフモードの種類 minimal / network / dsrepair
bootlog ブートログ(ntbtlog.txt)の記録 yes / no
nointegritychecks ドライバー署名チェックの無効化 yes / no
testsigning テスト署名モードの有効化 on / off
nx データ実行防止(DEP)の設定 AlwaysOff / OptIn / OptOut / AlwaysOn
numproc 使用するCPU数の制限 1 〜 最大数
maxmem 使用するメモリの最大量(MB) 512, 1024 など
vga 低解像度VGAモードを有効化 on / off
debug カーネルデバッグモード on / off

エントリの表示名を変更する

エントリの名前変更
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 現在のエントリの表示名を変更
bcdedit /set {current} description "Windows 11 Pro (業務用)"

echo ブートメニューの名前を変更しました

メモリ使用量を制限する(トラブルシューティング用)

メモリ障害の切り分けや、低スペック環境でのテスト時に使用するメモリ量を制限できます。

メモリ使用量の制限
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 最大メモリを4096MB(4GB)に制限
bcdedit /set {current} maxmem 4096
echo [設定] 使用メモリを4GBに制限しました(次回起動から有効)

:: 制限を解除(設定値を削除)
:: bcdedit /deletevalue {current} maxmem
:: echo [解除] メモリ制限を解除しました

使用するCPU数を制限する

マルチコアCPUのテストや、CPU依存のバグ再現に使用します。

CPU数の制限と解除
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: シングルコアでの動作確認用(CPUを1コアに制限)
bcdedit /set {current} numproc 1
echo [設定] CPU使用数を1に制限しました(次回起動から有効)

:: 制限を解除
:: bcdedit /deletevalue {current} numproc
:: echo [解除] CPU制限を解除しました

デフォルトOSとタイムアウトの設定

ブートタイムアウトの変更(/timeout)

ブートメニューの表示時間(秒)を変更します。0を指定するとブートメニューが表示されずに即座に起動します。-1を指定するとタイムアウトなし(ユーザーが選択するまで待機)になります。

タイムアウトの設定
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: タイムアウトを10秒に設定
bcdedit /timeout 10
echo タイムアウトを10秒に設定しました

:: タイムアウトを0にする(メニュー非表示・即時起動)
:: bcdedit /timeout 0

:: タイムアウトなし(-1 で待機)
:: bcdedit /timeout -1

デフォルト起動エントリの変更(/default)

デュアルブート環境でどのOSをデフォルトとして起動するかを変更します。

デフォルトエントリの変更
@echo off
setlocal enabledelayedexpansion

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 現在のエントリ一覧を表示
echo === 現在のブートエントリ一覧 ===
bcdedit /enum
echo.

:: {current} を使うと「今実行しているOS」がデフォルトになる
bcdedit /default {current}
echo 現在のOSをデフォルト起動に設定しました

endlocal

ブートメニューの表示順序を設定する(/displayorder)

デュアルブート環境でブートメニューに表示されるエントリの順序を変更します。

ブートメニューの表示順序変更
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 現在のエントリを先頭に移動
bcdedit /displayorder {current} /addfirst
echo [設定] 現在のOSをブートメニュー先頭に移動しました

:: 特定のGUIDを末尾に移動
:: bcdedit /displayorder {GUID} /addlast

:: 特定のGUIDをメニューから削除(エントリは残る)
:: bcdedit /displayorder {GUID} /remove

:: 表示順序を完全にリセット(デフォルトに戻す)
:: bcdedit /displayorder /addfirst {default}

次回起動時のみ別エントリで起動する(/bootsequence)

/bootsequence を使うと、次回の1回だけ別のOSやエントリで起動させることができます。再起動後は元のデフォルトに戻ります。

1回だけ別エントリで起動
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 次回起動時のみメモリ診断で起動
bcdedit /bootsequence {memdiag}
echo 次回起動時: Windowsメモリ診断で起動します

:: 確認後、再起動
:: shutdown /r /t 5

セーフモードの自動設定と解除

障害対応や定期メンテナンスでセーフモードを使う場合、バッチで自動化できます。特に「次回起動時のみセーフモードで起動させてメンテナンス後に通常モードに戻す」という自動化は実務でよく使われます。

セーフモードの種類 bcdeditの値 用途
セーフモード(最小) safeboot minimal 基本的なドライバーのみ。ネットワークなし
セーフモード(ネットワーク) safeboot network ネットワークドライバーも読み込む
セーフモード(DSRepair) safeboot dsrepair ドメインコントローラーの修復用

セーフモードを有効化する

safeboot_enable.bat
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: セーフモード(最小)を有効化
bcdedit /set {current} safeboot minimal

if not errorlevel 1 (
    echo [成功] 次回起動時からセーフモード(最小)で起動します
    echo 通常モードに戻すには safeboot_disable.bat を実行してください
) else (
    echo [エラー] セーフモードの設定に失敗しました
)

セーフモードを解除して通常起動に戻す

safeboot_disable.bat
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: safeboot 設定を削除して通常起動に戻す
bcdedit /deletevalue {current} safeboot

if not errorlevel 1 (
    echo [成功] 通常モードに戻しました。再起動すると有効になります
) else (
    echo safeboot は設定されていませんでした(すでに通常モード)
)

メンテナンス後に自動で通常モードに戻すパターン

セーフモードで特定の処理(ウイルススキャン・ドライバー削除など)を自動実行した後、通常モードに戻す完全自動化パターンです。

maintenance_safe_mode.bat
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: セーフモード中かどうかを確認
:: SAFEBOOT_OPTION 環境変数が存在する場合はセーフモード
if defined SAFEBOOT_OPTION (
    echo ===== セーフモードで実行中 =====
    echo セーフモードの種類: %SAFEBOOT_OPTION%
    echo.

    :: ===== セーフモード時のメンテナンス処理 =====
    echo [メンテナンス] 処理を実行中...
    :: sfc /scannow
    :: DISM /Online /Cleanup-Image /RestoreHealth
    echo [メンテナンス] 完了
    :: =============================================

    :: メンテナンス完了後、セーフモードを解除して再起動
    bcdedit /deletevalue {current} safeboot
    echo [設定] 通常モードに戻しました
    shutdown /r /t 10 /c "メンテナンス完了。10秒後に再起動します"

) else (
    echo ===== 通常モードで実行中 =====
    echo セーフモードへの切り替えと再起動を行います

    :: RunOnceに自身を登録(セーフモード起動後に実行されるよう)
    reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "SafeModeMaintenance" /t REG_SZ /d "cmd /c "%~f0"" /f >nul

    :: セーフモードを有効化して再起動
    bcdedit /set {current} safeboot minimal
    shutdown /r /t 10 /c "セーフモードでメンテナンスを実行します。10秒後に再起動"
)

スタートアップへの登録についてはPC起動・ログオン時に自動実行するバッチファイルの完全ガイドも参照してください。

ブート設定のバックアップと復元(/export・/import)

BCD設定を変更する前に必ずエクスポートでバックアップを取ってください。何か問題が発生した場合に元の設定に戻せます。

bcd_backup_restore.bat
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

set BACKUP_DIR=%~dp0bcd_backups
set BACKUP_FILE=%BACKUP_DIR%\bcd_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%.bak
:: 時刻の空白を0に置換
set BACKUP_FILE=%BACKUP_FILE: =0%

if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

:: バックアップ(エクスポート)
if "%1"=="backup" (
    bcdedit /export "%BACKUP_FILE%"
    if not errorlevel 1 (
        echo [成功] バックアップ完了: %BACKUP_FILE%
    ) else (
        echo [エラー] バックアップに失敗しました
    )
    exit /b
)

:: 復元(インポート)
if "%1"=="restore" (
    if "%2"=="" ( echo 復元ファイルを引数2に指定してください & exit /b 1 )
    if not exist "%2" ( echo [エラー] ファイルが見つかりません: %2 & exit /b 1 )
    echo [警告] BCDを復元します
    bcdedit /import "%2"
    if not errorlevel 1 (
        echo [成功] BCD復元完了: %2 / 再起動してください
    ) else (
        echo [エラー] 復元に失敗しました
    )
    exit /b
)

echo 使い方:
echo   %~nx0 backup              (バックアップ作成)
echo   %~nx0 restore [ファイル]   (バックアップから復元)

BCDインポートの注意点
bcdedit /import はBCDストア全体を置き換えます。部分的な復元はできません。また、インポート後は必ず再起動が必要です。Windowsが起動しなくなった場合は、インストールメディアの「スタートアップ修復」か「コマンドプロンプト」からbcdeditを実行してください。

ブートエントリの作成・複製・削除

デュアルブート用エントリを追加する

Windows 10 と Windows 11 のデュアルブート環境でエントリを手動追加する例です。

デュアルブートエントリの追加
@echo off
setlocal enabledelayedexpansion

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 既存エントリを複製して新しいエントリを作成
for /f "tokens=3" %%A in ('bcdedit /copy {current} /d "Windows 10 (サブ環境)"') do (
    set "NEW_GUID=%%A"
)

if not defined NEW_GUID (
    echo [エラー] エントリの作成に失敗しました
    exit /b 1
)

set "NEW_GUID=!NEW_GUID:~1,-1!"
echo 新しいエントリGUID: {!NEW_GUID!}

:: 新しいエントリのOSドライブを指定
bcdedit /set {!NEW_GUID!} osdevice partition=D:
bcdedit /set {!NEW_GUID!} device partition=D:
bcdedit /set {!NEW_GUID!} systemroot \Windows

:: ブートメニューの表示順に追加
bcdedit /displayorder {!NEW_GUID!} /addfirst

echo [成功] デュアルブートエントリを追加しました
bcdedit /enum

endlocal

ブートエントリを削除する

ブートエントリの削除
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 削除前に必ずエントリを確認すること
echo 削除前にエントリを確認します
bcdedit /enum

echo.
set /p GUID_TO_DEL=削除するGUIDを入力してください({} を含む形式): 
if "%GUID_TO_DEL%"=="" ( echo キャンセルしました & exit /b )

bcdedit /delete %GUID_TO_DEL%
if not errorlevel 1 (
    echo [成功] エントリを削除しました: %GUID_TO_DEL%
) else (
    echo [エラー] 削除に失敗しました({current}/{default}は削除不可)
)

診断用のブートエントリを追加する(VGAモード)

ドライバーの問題を診断するため、低解像度VGAモードで起動するエントリを追加する例です。

VGAモードエントリの追加
@echo off
setlocal enabledelayedexpansion

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: 現在のエントリを複製
for /f "tokens=3" %%A in ('bcdedit /copy {current} /d "Windows 11 (低解像度VGAモード)"') do (
    set "NEW_GUID=%%A"
)
set "NEW_GUID=!NEW_GUID:~1,-1!"

:: VGAモードを有効化(起動時に基本ディスプレイドライバーを使用)
bcdedit /set {!NEW_GUID!} vga on
bcdedit /set {!NEW_GUID!} bootlog yes

echo [成功] VGAモードエントリを追加しました: {!NEW_GUID!}

endlocal

テスト署名・デバッグモード・ブートログの設定

ドライバー開発やシステム診断で使う高度な設定です。特にデバイスドライバーの開発環境でよく使われます。

テスト署名モードの有効化

自己署名(Self-Signed)のドライバーをインストールする際に有効化します。セキュリティが低下するため本番環境では使用しないでください。

テスト署名モードの切り替え
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: テスト署名を有効化(未署名ドライバーのインストールが可能になる)
bcdedit /set testsigning on
echo [有効] テスト署名モードを有効化しました
echo 再起動後、デスクトップ右下に「テストモード」と表示されます

:: テスト署名を無効化(本番環境に戻す)
:: bcdedit /set testsigning off

ブートログを有効化する

起動時のドライバー読み込みをログに記録します。起動トラブルの原因特定に役立ちます。ログは C:\Windows\ntbtlog.txt に保存されます。

ブートログの有効化と確認
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

:: ブートログを有効化
bcdedit /set {current} bootlog yes
echo ブートログを有効化しました(C:\Windows\ntbtlog.txt に記録)

:: 無効化
:: bcdedit /set {current} bootlog no

:: ブートログを確認
if exist "C:\Windows\ntbtlog.txt" (
    echo === 最後のブートログ(末尾20行) ===
    powershell -NoProfile -Command "Get-Content C:\Windows\ntbtlog.txt | Select-Object -Last 20"
)

UEFI環境でのbcdedit使用上の注意

Windows 10/11がUEFIモードでインストールされている場合、BCDストアはEFIシステムパーティション(ESP)内に格納されます。基本的な操作は同じですが、いくつかの違いがあります。

項目 Legacy BIOS UEFI
BCDストアの場所 システム予約パーティション \Boot\BCD EFIシステムパーティション EFI\Microsoft\Boot\BCD
ブートローダーのパス \Windows\system32\winload.exe \Windows\system32\winload.efi
Secure Boot 非対応 有効時は署名なしローダーが使えない
ファームウェアエントリ なし {fwbootmgr}が存在する
UEFIモードかどうかを確認する
@echo off

:: UEFIかBIOSかを確認
bcdedit /enum all | findstr /i "fwbootmgr" >nul 2>&1
if not errorlevel 1 (
    echo このPCはUEFIモードで起動しています
) else (
    echo このPCはLegacy BIOSモードで起動しています
)

:: またはwmicで確認
for /f "skip=1 tokens=2 delims==" %%A in ('wmic computersystem get PCSystemType /value 2^>nul') do (
    echo PCシステムタイプ: %%A
)

Secure Boot有効時の注意
Secure BootはUEFI環境で署名のないブートローダーを拒否するセキュリティ機能です。bcdedit /set testsigning onnointegritychecks yes はSecure Boot有効時には効果がありません。テスト署名モードを使用するにはBIOS設定でSecure Bootを一時的に無効化する必要があります。

Windows回復環境(WinRE)からのbcdedit操作

bcdeditの誤操作でWindowsが起動しなくなった場合、回復環境(Windows Recovery Environment)のコマンドプロンプトからBCDを修復できます。

回復環境へのアクセス方法

  • Windowsが起動する場合: 設定→更新とセキュリティ→回復→今すぐ再起動、または shutdown /r /o /t 0
  • Windowsが起動しない場合: 電源ボタンを使った強制再起動を2〜3回繰り返すと自動的に回復環境が起動(Windows 10/11)
  • インストールメディアから: Windowsインストールメディアから起動→「コンピューターを修復する」→「トラブルシューティング」→「コマンドプロンプト」

回復環境での基本的な修復コマンド

WinREでのBCD修復
:: Windows回復環境のコマンドプロンプトで実行

:: 1. BCDの内容を確認
bcdedit /enum all

:: 2. セーフモードが残っている場合は削除
bcdedit /deletevalue {default} safeboot

:: 3. ブートレコードを再構築(最も強力な修復)
bootrec /fixmbr
bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd

:: 4. バックアップが残っている場合は復元
:: bcdedit /import C:\BCDBackups\bcd_backup.bak

:: 5. 修復後に再起動
wpeutil reboot
回復環境からセーフモードを解除する
:: WinREのコマンドプロンプトで

:: {default} または {current} のsafeboot設定を削除
bcdedit /deletevalue {default} safeboot

:: GUID を直接指定する場合
:: bcdedit /enum all でGUIDを確認してから
:: bcdedit /deletevalue {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} safeboot

:: または msconfig で解除する(Windowsが起動する場合)
:: [ブートタブ] → [セーフブートのチェックを外す] → [OK]

実践パターン:バッチでブート設定を自動管理する

パターン①:定期メンテナンスをセーフモードで完全自動化

auto_safe_maintenance.bat
@echo off
setlocal

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

set LOG=%~dp0safe_maintenance.log

:: セーフモード中の処理
if defined SAFEBOOT_OPTION (
    echo [%DATE% %TIME%] セーフモード(%SAFEBOOT_OPTION%)で開始 >> "%LOG%"

    echo [1/3] SFC スキャン実行中...
    sfc /scannow >> "%LOG%" 2>&1

    echo [2/3] DISM 修復実行中...
    DISM /Online /Cleanup-Image /RestoreHealth >> "%LOG%" 2>&1

    echo [3/3] チェックディスクを予約...
    echo y | chkdsk C: /f >> "%LOG%" 2>&1

    echo [%DATE% %TIME%] メンテナンス完了 >> "%LOG%"

    reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "SafeModeMaintenance" /f >nul 2>&1
    bcdedit /deletevalue {current} safeboot
    shutdown /r /t 30 /c "メンテナンス完了。30秒後に通常モードで再起動"

) else (
    echo [%DATE% %TIME%] セーフモードへ移行します >> "%LOG%"
    reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "SafeModeMaintenance" /t REG_SZ /d "cmd /c "%~f0"" /f >nul
    bcdedit /set {current} safeboot minimal
    shutdown /r /t 10 /c "メンテナンス開始。10秒後にセーフモードで再起動"
)

endlocal

スケジュール実行はschtasksコマンドの完全ガイドを、処理ログはログ出力の完全ガイドを参照してください。

パターン②:BCD設定を定期バックアップする

bcd_weekly_backup.bat
@echo off
setlocal

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

set BACKUP_DIR=C:\BCDBackups
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

set BAK_FILE=%BACKUP_DIR%\bcd_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.bak

bcdedit /export "%BAK_FILE%"
if not errorlevel 1 (
    echo [成功] BCDバックアップ: %BAK_FILE%
    :: 7世代以上古いバックアップを削除
    for /f "skip=7 delims=" %%F in ('dir /b /o:-d "%BACKUP_DIR%\*.bak" 2^>nul') do (
        del /q "%BACKUP_DIR%\%%F"
        echo [削除] 古いバックアップ: %%F
    )
) else (
    echo [エラー] バックアップ失敗
)

endlocal

パターン③:現在のBCD設定をレポートとして保存する

bcd_report.bat
@echo off
setlocal

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

set REPORT=%~dp0bcd_report_%COMPUTERNAME%_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.txt

echo ===== BCD設定レポート ===== > "%REPORT%"
echo 生成日時: %DATE% %TIME% >> "%REPORT%"
echo コンピュータ名: %COMPUTERNAME% >> "%REPORT%"
echo. >> "%REPORT%"

echo === 全ブートエントリ === >> "%REPORT%"
bcdedit /enum all >> "%REPORT%"

echo. >> "%REPORT%"
echo === デバッグ設定 === >> "%REPORT%"
bcdedit /dbgsettings >> "%REPORT%"

echo レポートを生成しました: %REPORT%

endlocal

パターン④:デュアルブート環境をコマンドで切り替える

dual_boot_switch.bat
@echo off
setlocal enabledelayedexpansion

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

echo === 現在のブートエントリ ===
bcdedit /enum | findstr /i "identifier description"
echo.

echo [1] Windows 11
echo [2] Windows 10
set /p CHOICE=次回起動するOSを選択してください (1/2): 

if "%CHOICE%"=="1" (
    for /f "tokens=4" %%G in ('bcdedit /enum ^| findstr /i "Windows 11"') do (
        bcdedit /default %%G >nul 2>&1
        if not errorlevel 1 echo [成功] Windows 11 をデフォルトに設定しました
    )
) else if "%CHOICE%"=="2" (
    for /f "tokens=4" %%G in ('bcdedit /enum ^| findstr /i "Windows 10"') do (
        bcdedit /default %%G >nul 2>&1
        if not errorlevel 1 echo [成功] Windows 10 をデフォルトに設定しました
    )
) else (
    echo 無効な選択です & exit /b 1
)

set /p REBOOT=今すぐ再起動しますか? (y/n): 
if /i "%REBOOT%"=="y" shutdown /r /t 5

endlocal

パターン⑤:セーフモードの現在の状態を確認するスクリプト

check_boot_mode.bat
@echo off
setlocal

echo === 現在のブートモード確認 ===

:: 方法①: 環境変数で確認
if defined SAFEBOOT_OPTION (
    echo [セーフモード] 種類: %SAFEBOOT_OPTION%
) else (
    echo [通常モード]
)

:: 方法②: BCDの設定を確認
bcdedit /enum | findstr /i "safeboot" >nul 2>&1
if not errorlevel 1 (
    echo [BCD] セーフモード設定あり
    bcdedit /enum | findstr /i "safeboot"
) else (
    echo [BCD] セーフモード設定なし(通常起動)
)

endlocal

パターン⑥:展開後の複数PCにBCD設定を一括適用する

bulk_bcd_setup.bat
@echo off
setlocal

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

echo [%COMPUTERNAME%] BCD標準設定を適用します

bcdedit /timeout 5
echo [1/4] タイムアウト: 5秒

bcdedit /set {current} description "Windows 11 Pro"
echo [2/4] エントリ名を設定

bcdedit /deletevalue {current} bootlog >nul 2>&1
echo [3/4] ブートログを無効化

bcdedit /set testsigning off >nul 2>&1
bcdedit /set nointegritychecks no >nul 2>&1
echo [4/4] テスト署名・デバッグ無効化

if not exist "C:\BCDBackups" mkdir "C:\BCDBackups"
bcdedit /export "C:\BCDBackups\initial_%COMPUTERNAME%.bak" >nul
echo [バックアップ完了]

echo [完了] BCD標準設定の適用が完了しました

endlocal

パターン⑦:大量PCのセーフモードを一括解除する

誤ってセーフモードが有効になったまま大量のPCが再起動してしまった場合の緊急対応スクリプトです。PsExecで遠隔から一括解除します。

emergency_safeboot_disable.bat
@echo off
setlocal enabledelayedexpansion

net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )

set PC_LIST=%~dp0pc_list.txt
set LOG=%~dp0safemode_recovery_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log

if not exist "%PC_LIST%" (
    echo [エラー] pc_list.txt が見つかりません
    exit /b 1
)

echo [%DATE% %TIME%] セーフモード一括解除開始 >> "%LOG%"

for /f "usebackq eol=# tokens=1" %%P in ("%PC_LIST%") do (
    echo %%P: セーフモード確認中...

    :: 対象PCのセーフモード設定を確認
    psexec \\%%P -s -accepteula bcdedit /enum 2>nul | findstr /i "safeboot" >nul 2>&1
    if not errorlevel 1 (
        :: セーフモードが設定されている場合は解除
        psexec \\%%P -s -accepteula bcdedit /deletevalue {current} safeboot >nul 2>&1
        if not errorlevel 1 (
            echo [解除成功] %%P
            echo [%DATE% %TIME%] %%P - セーフモード解除成功 >> "%LOG%"
            :: 1分後に再起動
            psexec \\%%P -s -accepteula shutdown /r /t 60 /c "セーフモード解除。60秒後に再起動" >nul 2>&1
        ) else (
            echo [解除失敗] %%P
            echo [%DATE% %TIME%] %%P - 解除失敗 >> "%LOG%"
        )
    ) else (
        echo [スキップ] %%P: セーフモード設定なし
        echo [%DATE% %TIME%] %%P - セーフモード設定なし >> "%LOG%"
    )
)

echo 完了。ログ: %LOG%
endlocal

管理者権限でのリモート操作については管理者権限の自動取得完全ガイドを参照してください。

bcdeditでよく発生するエラーと対処法

エラー①:「システムで正しく起動できませんでした」で起動不能になった

原因:BCDの設定ミスでWindowsローダーが見つからなくなった。
対処:Windowsインストールメディアから起動して「スタートアップ修復」を実行するか、「コマンドプロンプト」から以下を実行してください。

回復コンソールからの修復
:: Windowsインストールメディアの「コマンドプロンプト」から実行

:: ブートレコードを再構築
bootrec /fixmbr
bootrec /fixboot
bootrec /rebuildbcd

:: または bcdedit /import でエクスポートしたバックアップを復元
bcdedit /import C:\BCDBackups\bcd_backup.bak

エラー②:「指定された識別子が見つかりませんでした」

原因:指定したGUIDが存在しないか、入力ミスがある。
対処:bcdedit /enum all で正確なGUIDを確認してから再実行してください。

エラー③:「要求された操作は、制限されています」

原因①:管理者権限なしで実行した。
原因②:Secure Bootが有効でBCDの特定変更が制限されている。
対処:「管理者として実行」でコマンドプロンプトを起動してください。

管理者権限の自動取得については管理者権限を自動取得する完全ガイドを参照してください。

エラー④:「指定された値の型は指定されたエントリには無効です」

原因:/set で指定した datatype や value が不正。
対処:safeboot の値は minimal/network/dsrepair のみ有効です。bcdedit /? set でヘルプを確認してください。

エラー⑤:bcdedit /import 後に起動しない

原因:インポートしたBCDが別のPC用の設定か、BCDファイルが破損している。
対処:回復コンソールから bootrec /rebuildbcd でBCDを再構築するか、「スタートアップ修復」を実行してください。

エラー⑥:セーフモードを有効にしたが通常に戻せない

原因:セーフモード中に bcdedit /deletevalue {current} safeboot を実行できなかった。
対処:セーフモードでも管理者コマンドプロンプトから同コマンドを実行できます。または msconfig のブートタブから「セーフブート」チェックを外してください。

セーフモードの強制解除
:: 管理者コマンドプロンプトから実行(セーフモード中でも有効)
bcdedit /deletevalue {current} safeboot

:: または msconfig から解除する場合
msconfig
:: [ブート]タブ → [セーフブート]のチェックを外す → 再起動

よくある質問

Qbcdeditを実行したら「管理者として実行されていません」と表示されます。
Abcdeditはすべての操作に管理者権限が必要です。コマンドプロンプトを右クリック→「管理者として実行」で起動してから実行してください。
Qbcdedit /enum で{current}と{default}が表示されますが、違いは何ですか?
A{current}は現在実行中のWindowsエントリを指し、{default}はブートメニューで自動的に選択されるデフォルトエントリを指します。シングルブートなら両方が同じエントリを指します。デュアルブートで異なるOSを使用中の場合、{current}と{default}が異なるエントリを指すことがあります。
Qセーフモードを設定したら再起動後にセーフモードで起動しました。元に戻すには?
Aセーフモード中に管理者コマンドプロンプトを開いて bcdedit /deletevalue {current} safeboot を実行してください。または「システム構成(msconfig)」のブートタブで「セーフブート」のチェックを外すことでも解除できます。
Qbcdeditでタイムアウトを0にしたら、ブートメニューが全く表示されなくなりました。
Aこれは仕様通りの動作です。0を指定するとブートメニューなしで即座にデフォルトエントリが起動します。再度ブートメニューを表示したい場合は bcdedit /timeout 10 などで秒数を指定してください。-1を指定するとタイムアウトなし(ユーザーが選択するまで待機)になります。
Qbcdeditのエクスポートファイルを開いてみたらバイナリで読めません。
Abcdedit /export で作成されるBCDバックアップはバイナリ形式です。テキストで内容を確認したい場合は bcdedit /enum all > output.txt でリダイレクトして保存してください。
Qデュアルブートのエントリ名を日本語にできますか?
Aはい。bcdedit /set {GUID} description “Windows 11 日本語版” のようにダブルクォートで囲めば日本語の名前を設定できます。
Qセーフモードで起動したときにネットワークを使えるようにするには?
Abcdedit /set {current} safeboot network を設定してください。safeboot minimalはネットワークドライバーを読み込まないため、ネットワークが使えません。
Qbcdedit /copy で複製したエントリを削除したいのですが、{current}と表示されて削除できません。
A{current}は現在実行中のエントリを指す特別な識別子のため削除できません。bcdedit /enum で実際のGUID({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}形式)を確認し、そのGUIDを指定して削除してください。なお{current}と{default}は削除不可です。
Qテスト署名モードを有効にしたらデスクトップに「テストモード」と表示されています。
Abcdedit /set testsigning off を管理者コマンドプロンプトで実行して再起動してください。再起動後は表示が消えます。
QbcdeditはUEFIとBIOSどちらでも使えますか?
Aはい、bcdeditはUEFI・Legacy BIOS両方で使用できます。UEFIシステムではBCDストアがEFIシステムパーティション(ESP)内の EFI\Microsoft\Boot\BCD に格納されます。基本的な操作は同じですが、Secure Bootが有効な場合は一部の操作に制限があります。
Qmaxmemで設定したメモリ制限を解除するには?
Abcdedit /deletevalue {current} maxmem を管理者コマンドプロンプトで実行してください。同様に numproc の解除は bcdedit /deletevalue {current} numproc です。
Qbcdedit /bootsequence でメモリ診断を設定しましたが、次回起動で反映されませんでした。
AUEFI環境ではブートシーケンスが期待通りに動作しない場合があります。また、高速スタートアップが有効だと設定が無視されることがあります。高速スタートアップを一時的に無効化(「電源オプション」→「電源ボタンの動作の選択」→「高速スタートアップを有効にする」のチェックを外す)してから試してください。
QBCDが破損していると思われます。修復方法を教えてください。
Aインストールメディアまたは回復ドライブから起動して「スタートアップ修復」を実行するのが最も簡単です。コマンドプロンプトから操作する場合は bootrec /fixmbr → bootrec /fixboot → bootrec /scanos → bootrec /rebuildbcd の順に実行してください。事前に bcdedit /export でバックアップがある場合は bcdedit /import で復元できます。

まとめ

bcdeditコマンドを使うと、Windowsのブート設定をコマンドラインから完全に管理できます。特に「セーフモードの自動切替」「デュアルブートの管理」「ブート設定のバックアップ・復元」は、システム管理者の日常業務で大きく役立ちます。

最後に必ず確認してください
bcdeditの誤操作はPCが起動できなくなるリスクがあります。必ず作業前に bcdedit /export でバックアップを取ってから変更してください。

よく使う操作 コマンド
エントリ一覧を表示 bcdedit /enum
全エントリを表示 bcdedit /enum all
タイムアウトを設定 bcdedit /timeout 10
デフォルト起動を変更 bcdedit /default {GUID}
エントリ名を変更 bcdedit /set {current} description "名前"
メモリ制限 bcdedit /set {current} maxmem 4096
CPU数制限 bcdedit /set {current} numproc 1
セーフモードを有効化 bcdedit /set {current} safeboot minimal
セーフモードを解除 bcdedit /deletevalue {current} safeboot
ブートログを有効化 bcdedit /set {current} bootlog yes
BCDをバックアップ bcdedit /export backup.bak
BCDを復元 bcdedit /import backup.bak
テスト署名を有効化 bcdedit /set testsigning on
次回のみ別エントリで起動 bcdedit /bootsequence {GUID}

セーフモードの自動化・定期バックアップ・デュアルブート管理・展開後の標準設定適用・緊急時の大量PC一括対応など、実務で役立つパターンを活用してWindowsブート設定の管理を効率化してください。