「Windowsにセーフモードで自動起動させてメンテナンスしたい」「デュアルブート環境のデフォルトOSをコマンドで切り替えたい」——こういったブート設定の自動化を実現するのが bcdedit(ビーシーディーエディット)コマンドです。Windows Vista以降に搭載されており、Windows起動を制御するBCD(Boot Configuration Data)ストアをコマンドラインから完全に操作できます。
本記事では、bcdeditの基本構文からブートエントリの確認・作成・削除・変更、デフォルトOS設定、セーフモードの自動設定・解除、ブート設定のバックアップと復元、UEFI環境での注意点、回復環境からの操作まで、実際に動作するバッチスクリプトを使って徹底解説します。
bcdeditの誤操作はPCが起動できなくなる原因になります
BCDの変更は誤操作するとWindowsが起動しなくなる非常にリスクの高い操作です。本記事のスクリプトを実行する前に必ず bcdedit /export でバックアップを取ってください。また、すべての操作に管理者権限が必要です。
本記事で分かること
- bcdeditの基本構文とサブコマンド一覧
- ブートエントリの確認・作成・削除・複製
- デフォルト起動OSの変更とタイムアウト設定
- セーフモードの自動設定と解除スクリプト
- デュアルブート環境の管理方法
- ブート設定のエクスポート・インポートによるバックアップ
- テスト署名・デバッグモード・メモリ/CPU制限の設定
- UEFI環境と回復環境(WinRE)からの操作方法
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 でファームウェアブートマネージャーや :: メモリ診断なども含めて表示される
ブートエントリをバッチで取得して変数に格納する
@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依存のバグ再現に使用します。
@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やエントリで起動させることができます。再起動後は元のデフォルトに戻ります。
@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 |
ドメインコントローラーの修復用 |
セーフモードを有効化する
@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 [エラー] セーフモードの設定に失敗しました
)
セーフモードを解除して通常起動に戻す
@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 は設定されていませんでした(すでに通常モード)
)
メンテナンス後に自動で通常モードに戻すパターン
セーフモードで特定の処理(ウイルススキャン・ドライバー削除など)を自動実行した後、通常モードに戻す完全自動化パターンです。
@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設定を変更する前に必ずエクスポートでバックアップを取ってください。何か問題が発生した場合に元の設定に戻せます。
@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モードで起動するエントリを追加する例です。
@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}が存在する |
@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 on や nointegritychecks 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インストールメディアから起動→「コンピューターを修復する」→「トラブルシューティング」→「コマンドプロンプト」
回復環境での基本的な修復コマンド
:: 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]
実践パターン:バッチでブート設定を自動管理する
パターン①:定期メンテナンスをセーフモードで完全自動化
@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設定を定期バックアップする
@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設定をレポートとして保存する
@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
パターン④:デュアルブート環境をコマンドで切り替える
@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
パターン⑤:セーフモードの現在の状態を確認するスクリプト
@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設定を一括適用する
@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で遠隔から一括解除します。
@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
:: [ブート]タブ → [セーフブート]のチェックを外す → 再起動
よくある質問
まとめ
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ブート設定の管理を効率化してください。
