bootrec.exe(Boot Recovery Executable)是 Vista 之后引入、WinRE / 安装介质命令行专属引导修复工具,核心面向 Legacy BIOS+MBR 引导修复;UEFI-GPT 场景能力很有限,不能替代 bcdboot

bootrec.exe(Boot Recovery Executable)完整解构

前置:bootrec 是 Vista 之后引入、WinRE / 安装介质命令行专属引导修复工具,核心面向 Legacy BIOS+MBR 引导修复;UEFI-GPT 场景能力很有限,不能替代 bcdboot。 固定结构:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界

一、底层原理

bootrec.exe 本质是用户态封装调度程序,不内置底层扇区读写、BCD 解析完整实现,依靠系统提供的磁盘接口、BCD 相关底层 API 完成 4 个子功能:

  1. /FixMbr:向磁盘 LBA0 写入标准 Windows MBR 引导代码,保留原有分区表,只修复引导代码损坏;
  2. /FixBoot:在活动分区写入 PBR 分区引导代码,PBR 的作用是后续加载 bootmgr.exe;
  3. /ScanOs:遍历系统所有磁盘卷,扫描识别存在的 Windows 安装实例,缓存候选系统信息;
  4. /RebuildBcd:读取扫描到的 Windows 实例,批量写入 \Boot\BCD 引导数据库。

关键区分:

  • MBR:磁盘 0 扇区,BIOS 执行,定位活动分区
  • PBR:活动分区首扇区,加载 bootmgr.exe
  • BCD:\Boot\BCD,引导配置数据库(替代 XP boot.ini)
  • UEFI+GPT:磁盘头部是保护性 MBR,/fixmbr 无实际引导价值;bootrec 无法自动部署 ESP 里的 bootmgfw.efi

二、依赖文件

文件 路径 & 作用
bootrec.exe X:\Sources\bootrec.exe(WinRE 内存盘 X:,运行主体)
bcd 相关系统 API 内部调用 BCD 原生 API,底层依赖同 bcdedit
vds.dll / vdsbas.dll VDS 虚拟磁盘服务,提供磁盘枚举、原始扇区读写接口
disk.sys / partmgr.sys 内核磁盘栈驱动,完成底层磁盘 I/O
ntfs.sys / fastfat.sys 文件系统驱动,读取 / 写入 BCD 数据库
bootmgr.exe Legacy 模式最终引导程序(修复后依赖它正常启动)
winre.wim WinRE 环境基础镜像,bootrec 运行宿主

补充:普通在线 Windows 系统虽然自带 bootrec.exe,但系统分区被独占锁定,扇区写入、BCD 重建经常失败,微软官方推荐WinRE / 安装介质环境执行。

三、依赖关系

3.1 整体调用链路

用户执行 bootrec /xxx
    ↓
bootrec → VDS虚拟磁盘服务 → 内核磁盘驱动(disk/partmgr)
    ↓
分支1:/FixMbr /FixBoot → 直接写入磁盘扇区(MBR/PBR引导代码)
分支2:/ScanOs → 遍历卷,识别有效Windows
分支3:/RebuildBcd → 调用BCD API写入\Boot\BCD

分支 1:bootrec /fixmbr

bootrec → VDS → disk.sys → 写入磁盘LBA0标准MBR代码 → 分区表不变

分支 2:bootrec /fixboot(Legacy)

bootrec → VDS → 校验分区标记【活动】→ 写入分区PBR引导代码 → PBR指向bootmgr.exe

分支 3:bootrec /rebuildbcd

bootrec → 扫描所有卷 → 识别Windows安装目录 → 生成BCD条目 → 写入\Boot\BCD

3.2 前置依赖

  1. 环境依赖:最优环境为 WinRE / 安装介质命令提示符;在线系统权限与文件锁会限制能力
  2. Legacy BIOS+MBR:必须存在标记为活动的主分区,否则/fixboot失败
  3. UEFI+GPT:必须已有 ESP 分区;bootrec 不能自动创建 ESP、不能修复丢失的 bootmgfw.efi
  4. 磁盘驱动正常:partmgr、disk 驱动正常加载,能够枚举磁盘、原始扇区读写
  5. 文件系统完好:存放 BCD 的分区 NTFS/FAT 不能严重损坏

3.3 互斥 & 叠加约束

  1. /FixMbr/FixBoot 相互独立,可单独执行,也可组合;
  2. /ScanOs 只探测、不会自动修改 BCD,必须搭配 /RebuildBcd 才持久写入;
  3. BCD 本身文件损坏但分区完好 → rebuildbcd 可修复;分区文件系统损坏 → bootrec 无效;
  4. BitLocker 加密卷未解锁时,无法读取分区与 BCD,修复失败。

四、逻辑链路

链路 1:Legacy BIOS+MBR 完整修复标准流程

flowchart LR
A[WinRE命令行] --> B[bootrec /fixmbr 重写磁盘0 MBR引导代码]
B --> C[bootrec /fixboot 写入活动分区PBR]
C --> D[bootrec /scanos 扫描磁盘识别Windows]
D --> E[bootrec /rebuildbcd 重建BCD引导库]
E --> F[bootmgr读取BCD,正常启动系统]

链路 2:UEFI GPT 场景(能力边界体现)

flowchart LR
A[bootrec /fixmbr] --> B[仅改写保护性MBR,无引导作用]
A --> C[bootrec /fixboot] --> D[无法识别ESP,基本失效]
A --> E[bootrec /rebuildbcd] --> F[仅可修复ESP内BCD,不能恢复bootmgfw.efi]

五、配套链

✅ 配套引导工具横向分工

工具 核心用途
bcdboot.exe UEFI 首选,自动部署 bootmgfw.efi、重建 BCD(bootrec 无法替代)
bcdedit.exe BCD 精细手动编辑、单条增删引导项
diskpart.exe 设置分区活动、挂载 ESP 盘符、修复分区结构
bootsect.exe 单独重写 PBR 引导代码
chkdsk 提前校验分区文件系统完整性

✅ 标准修复命令模板

:: Legacy MBR完整修复
bootrec /fixmbr
bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd

:: UEFI GPT 优先使用bcdboot,而不是bootrec
bcdboot C:\Windows /s S: /f UEFI

✅ 排查配套操作

:: diskpart查看分区状态
diskpart
list disk
list partition
:: 查看BCD内容
bcdedit /enum all

六、边界(能力上限、局限性、适用边界)

✅ 能力上限

  1. Legacy BIOS+MBR 场景一站式修复 MBR、PBR、BCD 三类引导故障,上手简单;
  2. 自动扫描全磁盘 Windows 实例,批量重建 BCD,省去手动 bcdedit 添加条目;
  3. 仅修改引导扇区与 BCD 数据库,不会修改用户数据、系统核心文件

❌ 核心局限

  1. UEFI+GPT 场景能力极弱,不能创建 ESP、不能恢复缺失的 bootmgfw.efi,/fixmbr 无效;
  2. 无法修复文件系统损坏、ntoskrnl/winload 等系统核心文件丢失;
  3. 不支持动态磁盘、BitLocker 未解锁加密磁盘;
  4. 仅适配微软原生 Windows 引导链,无法修复 GRUB 等第三方多引导;
  5. 在线系统执行容易因为文件锁定导致修复失败。

📌 适用边界

✅ Legacy BIOS + MBR 老设备:MBR 损坏、PBR 损坏、BCD 丢失 / 损坏 ✅ 快速批量重建 BCD 引导条目 ❌ UEFI GPT 新机引导修复(优先 bcdboot)、BitLocker 加密系统、系统文件损坏、第三方多引导

补充横向速查表

工具 MBR 修复 PBR 修复 BCD 重建 UEFI ESP 文件部署
bootrec.exe
bcdboot.exe
bcdedit.exe
bootsect.exe

SnowShot_2025-11-20_02-12-19

SnowShot_2025-11-20_02-12-43

SnowShot_2025-11-20_02-13-07

SnowShot_2025-11-20_02-13-32

bootrec /?

修复关键磁盘结构。支持以下命令:

/FixMbr -- 使用与 Windows 兼容的主启动记录写入系统分区的主启动记录。此操作不会覆盖现有的分区表。

/FixBoot -- 使用与 Windows 兼容的启动扇区向系统分区上写入一个新的启动扇区。

/ScanOs -- 在所有磁盘中扫描与 Windows 兼容的安装,并显示当前不位于启动配置存储中的条目。

/RebuildBcd -- 在所有磁盘中扫描与 Windows 兼容的安装,并允许用户选择要添加到启动配置存储中的条目。


修复 UEFI 引导问题,您可以使用批处理文件(.cmd)或 PowerShell 脚本来执行一些基本的修复步骤。以下是两种方法的示例。

方法 1:使用批处理文件 (.cmd)

您可以创建一个批处理文件,执行以下命令来修复 UEFI 引导:

 
batchCopy
@echo off
echo 修复 UEFI 引导...

:: 确保以管理员身份运行
if not "%1"=="runas" (
    echo 以管理员身份重新启动...
    powershell -Command "Start-Process '%~f0' -ArgumentList 'runas' -Verb RunAs"
    exit /b
)

:: 修复引导
bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /set {default} device partition=C:
bcdedit /set {default} osdevice partition=C:
bcdedit /set {default} path \Windows\System32\winload.efi

:: 更新引导配置
bcdboot C:\Windows /l zh-CN /s S: /f UEFI

echo 引导修复完成。
pause

方法 2:使用 PowerShell 脚本

您也可以使用 PowerShell 脚本来执行相同的操作。以下是一个示例脚本:

 
powershellCopy
# 确保以管理员身份运行
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

Write-Host "修复 UEFI 引导..."

# 修复引导
bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /set {default} device partition=C:
bcdedit /set {default} osdevice partition=C:
bcdedit /set {default} path \Windows\System32\winload.efi

# 更新引导配置
bcdboot C:\Windows /l zh-CN /s S: /f UEFI

Write-Host "引导修复完成。"

使用说明

  1. 创建文件

    • 将上述代码复制到文本编辑器中,并分别保存为 fix_boot.cmd 或 fix_boot.ps1
  2. 运行文件

    • 右键点击文件,选择“以管理员身份运行”。

注意事项

  • 确保您在执行这些命令之前备份重要数据。
  • 这些命令假设 Windows 安装在 C: 驱动器上,并且 EFI 系统分区是 S:。请根据实际情况调整驱动器字母。

增强版的批处理文件或 PowerShell 脚本来修复 UEFI 引导问题,我们可以添加更多的错误处理、日志记录和用户提示。以下是更为全面的示例。

增强版批处理文件 (.cmd)

 
batchCopy
@echo off
setlocal enabledelayedexpansion

echo 正在修复 UEFI 引导...

:: 确保以管理员身份运行
if not "%1"=="runas" (
    echo 以管理员身份重新启动...
    powershell -Command "Start-Process '%~f0' -ArgumentList 'runas' -Verb RunAs"
    exit /b
)

:: 日志文件
set LOGFILE=%TEMP%\uefi_repair_log.txt
echo 修复开始时间: %DATE% %TIME% > %LOGFILE%

:: 检查系统分区
set SYSTEM_PARTITION=S:
for /f "tokens=2" %%i in ('mountvol ^| findstr /i "EFI"') do set SYSTEM_PARTITION=%%i

echo 检测到 EFI 系统分区: %SYSTEM_PARTITION% >> %LOGFILE%

:: 修复引导
bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 修复引导失败,请检查日志文件。 >> %LOGFILE%
    echo 引导修复失败。
    exit /b
)

bcdedit /set {default} device partition=C: >> %LOGFILE% 2>&1
bcdedit /set {default} osdevice partition=C: >> %LOGFILE% 2>&1
bcdedit /set {default} path \Windows\System32\winload.efi >> %LOGFILE% 2>&1

:: 更新引导配置
bcdboot C:\Windows /l zh-CN /s %SYSTEM_PARTITION% /f UEFI >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 更新引导配置失败,请检查日志文件。 >> %LOGFILE%
    echo 引导配置更新失败。
    exit /b
)

echo 引导修复完成。 >> %LOGFILE%
echo 修复完成,日志文件位于: %LOGFILE%
pause

增强版 PowerShell 脚本

 
powershellCopy
# 确保以管理员身份运行
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

$logFile = "$env:TEMP\uefi_repair_log.txt"
"修复开始时间: $(Get-Date)" | Out-File -FilePath $logFile -Encoding utf8

# 检查系统分区
$systemPartition = (Get-Volume | Where-Object { $_.FileSystemLabel -eq "EFI" }).DriveLetter + ":"
if (-not $systemPartition) {
    $systemPartition = "S:"
}

"检测到 EFI 系统分区: $systemPartition" | Out-File -FilePath $logFile -Append -Encoding utf8

# 修复引导
try {
    bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi | Out-File -FilePath $logFile -Append -Encoding utf8
    bcdedit /set {default} device partition=C: | Out-File -FilePath $logFile -Append -Encoding utf8
    bcdedit /set {default} osdevice partition=C: | Out-File -FilePath $logFile -Append -Encoding utf8
    bcdedit /set {default} path \Windows\System32\winload.efi | Out-File -FilePath $logFile -Append -Encoding utf8

    # 更新引导配置
    bcdboot C:\Windows /l zh-CN /s $systemPartition /f UEFI | Out-File -FilePath $logFile -Append -Encoding utf8
    "引导修复完成。" | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "修复过程中发生错误: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    Write-Host "引导修复失败,请检查日志文件。"
    exit
}

Write-Host "修复完成,日志文件位于: $logFile"

使用说明

  1. 创建文件

    • 将上述代码分别复制到文本编辑器中,并保存为 enhanced_fix_boot.cmd 或 enhanced_fix_boot.ps1
  2. 运行文件

    • 右键点击文件,选择“以管理员身份运行”。

注意事项

  • 请确保在执行这些命令之前备份重要数据。
  • 这些命令假设 Windows 安装在 C: 驱动器上,并且 EFI 系统分区会自动检测。请根据实际情况调整。

批处理文件(.cmd)或 PowerShell 脚本来修复 UEFI 引导问题。这些脚本将执行必要的命令来重新配置引导设置,并确保系统能够正常启动。

方法 1:批处理文件 (.cmd)

以下是一个增强版的批处理文件示例,包含错误处理和日志记录功能:

 
batchCopy
@echo off
setlocal enabledelayedexpansion

echo 正在修复 UEFI 引导...

:: 确保以管理员身份运行
if not "%1"=="runas" (
    echo 以管理员身份重新启动...
    powershell -Command "Start-Process '%~f0' -ArgumentList 'runas' -Verb RunAs"
    exit /b
)

:: 日志文件
set LOGFILE=%TEMP%\uefi_repair_log.txt
echo 修复开始时间: %DATE% %TIME% > %LOGFILE%

:: 检查系统分区
for /f "tokens=2" %%i in ('mountvol ^| findstr /i "EFI"') do set SYSTEM_PARTITION=%%i
if not defined SYSTEM_PARTITION (
    echo 未找到 EFI 系统分区,请检查系统设置。 >> %LOGFILE%
    echo 错误:未找到 EFI 系统分区。
    exit /b
)

echo 检测到 EFI 系统分区: %SYSTEM_PARTITION% >> %LOGFILE%

:: 修复引导
bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 修复引导失败,请检查日志文件。 >> %LOGFILE%
    echo 引导修复失败。
    exit /b
)

bcdedit /set {default} device partition=C: >> %LOGFILE% 2>&1
bcdedit /set {default} osdevice partition=C: >> %LOGFILE% 2>&1
bcdedit /set {default} path \Windows\System32\winload.efi >> %LOGFILE% 2>&1

:: 更新引导配置
bcdboot C:\Windows /l zh-CN /s %SYSTEM_PARTITION% /f UEFI >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 更新引导配置失败,请检查日志文件。 >> %LOGFILE%
    echo 引导配置更新失败。
    exit /b
)

echo 引导修复完成。 >> %LOGFILE%
echo 修复完成,日志文件位于: %LOGFILE%
pause

方法 2:PowerShell 脚本

以下是一个增强版的 PowerShell 脚本示例,包含错误处理和日志记录功能:

 
powershellCopy
# 确保以管理员身份运行
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

$logFile = "$env:TEMP\uefi_repair_log.txt"
"修复开始时间: $(Get-Date)" | Out-File -FilePath $logFile -Encoding utf8

# 检查系统分区
$systemPartition = (Get-Volume | Where-Object { $_.FileSystemLabel -eq "EFI" }).DriveLetter + ":"
if (-not $systemPartition) {
    Write-Host "未找到 EFI 系统分区,请检查系统设置。" | Out-File -FilePath $logFile -Append -Encoding utf8
    exit
}

"检测到 EFI 系统分区: $systemPartition" | Out-File -FilePath $logFile -Append -Encoding utf8

# 修复引导
try {
    bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi | Out-File -FilePath $logFile -Append -Encoding utf8
    bcdedit /set {default} device partition=C: | Out-File -FilePath $logFile -Append -Encoding utf8
    bcdedit /set {default} osdevice partition=C: | Out-File -FilePath $logFile -Append -Encoding utf8
    bcdedit /set {default} path \Windows\System32\winload.efi | Out-File -FilePath $logFile -Append -Encoding utf8

    # 更新引导配置
    bcdboot C:\Windows /l zh-CN /s $systemPartition /f UEFI | Out-File -FilePath $logFile -Append -Encoding utf8
    "引导修复完成。" | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "修复过程中发生错误: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    Write-Host "引导修复失败,请检查日志文件。"
    exit
}

Write-Host "修复完成,日志文件位于: $logFile"

使用说明

  1. 创建文件

    • 将上述代码分别复制到文本编辑器中,并保存为 fix_boot.cmd 或 fix_boot.ps1
  2. 运行文件

    • 右键点击文件,选择“以管理员身份运行”。

注意事项

  • 确保在执行这些命令之前备份重要数据。
  • 这些命令假设 Windows 安装在 C: 驱动器上,并且 EFI 系统分区会自动检测。请根据实际情况调整驱动器字母。

批处理文件(.cmd)或 PowerShell 脚本来修复 BCD(Boot Configuration Data)。这些脚本将执行必要的命令来重建或修复 BCD,以解决启动问题。

方法 1:使用批处理文件 (.cmd)

以下是一个用于修复 BCD 的批处理文件示例:

 
batchCopy
@echo off
setlocal enabledelayedexpansion

echo 正在修复 BCD...

:: 确保以管理员身份运行
if not "%1"=="runas" (
    echo 以管理员身份重新启动...
    powershell -Command "Start-Process '%~f0' -ArgumentList 'runas' -Verb RunAs"
    exit /b
)

:: 创建日志文件
set LOGFILE=%TEMP%\bcd_repair_log.txt
echo 修复开始时间: %DATE% %TIME% > %LOGFILE%

:: 备份现有 BCD
echo 备份现有 BCD... >> %LOGFILE%
bcdedit /export C:\BCD_Backup.bak >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 备份失败,请检查日志文件。 >> %LOGFILE%
    exit /b
)

:: 删除现有 BCD
echo 删除现有 BCD... >> %LOGFILE%
del C:\boot\bcd >> %LOGFILE% 2>&1

:: 重建 BCD
echo 重建 BCD... >> %LOGFILE%
bcdboot C:\Windows /l zh-CN /s C: /f ALL >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 重建 BCD 失败,请检查日志文件。 >> %LOGFILE%
    exit /b
)

echo BCD 修复完成。 >> %LOGFILE%
echo 修复完成,日志文件位于: %LOGFILE%
pause

方法 2:使用 PowerShell 脚本

以下是一个用于修复 BCD 的 PowerShell 脚本示例:

 
powershellCopy
# 确保以管理员身份运行
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

$logFile = "$env:TEMP\bcd_repair_log.txt"
"修复开始时间: $(Get-Date)" | Out-File -FilePath $logFile -Encoding utf8

# 备份现有 BCD
"备份现有 BCD..." | Out-File -FilePath $logFile -Append -Encoding utf8
try {
    bcdedit /export C:\BCD_Backup.bak | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "备份失败: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    exit
}

# 删除现有 BCD
"删除现有 BCD..." | Out-File -FilePath $logFile -Append -Encoding utf8
Remove-Item C:\boot\bcd -ErrorAction SilentlyContinue

# 重建 BCD
"重建 BCD..." | Out-File -FilePath $logFile -Append -Encoding utf8
try {
    bcdboot C:\Windows /l zh-CN /s C: /f ALL | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "重建 BCD 失败: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    exit
}

"BCD 修复完成。" | Out-File -FilePath $logFile -Append -Encoding utf8
Write-Host "修复完成,日志文件位于: $logFile"

使用说明

  1. 创建文件

    • 将上述代码分别复制到文本编辑器中,并保存为 bcd_repair.cmd 或 bcd_repair.ps1
  2. 运行文件

    • 右键点击文件,选择“以管理员身份运行”。

注意事项

  • 请确保在执行这些命令之前备份重要数据。
  • 这些命令假设 Windows 安装在 C: 驱动器上。如果您的 Windows 安装在其他驱动器上,请相应地调整驱动器字母。

如果您的计算机使用 UEFI 引导方式并遇到启动问题,可以尝试以下方法:

您可以尝试以下方法:

  1. 使用Windows安装介质修复:您可以使用Windows安装光盘或USB启动盘来修复UEFI引导问题。在进入Windows安装界面后,选择“修复计算机”,然后按照提示进行操作。

  2. 更新UEFI固件:如果您的计算机的UEFI固件版本过低,可能会出现启动问题。您可以在计算机制造商的官网上下载最新版本的UEFI固件并更新,以帮助解决UEFI引导问题。

  3. 检查硬件故障:在某些情况下,UEFI引导问题可能是由硬件故障引起的。您可以运行硬件诊断工具来检查RAM、硬盘驱动器等硬件是否正常工作。

  1. 使用 Windows 安装媒体引导计算机并进入恢复环境。可以通过从 ISO 文件创建启动 USB 或 DVD 来获得 Windows 安装媒体。

  2. 在恢复环境中,选择“疑难解答” > “高级选项” > “命令提示符”来打开管理员权限的命令提示符。

  3. 输入以下命令以重建 BCD 文件:

Copy Code
bootrec /rebuildbcd

此命令可以扫描系统中所有 Windows 安装,然后将其添加到引导配置数据(BCD)文件中。

  1. 如果在运行 bootrec /rebuildbcd 命令后未找到 Windows 安装,则输入以下命令以重建 BCD 文件:
Copy Code
bcdedit /export C:\BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /rebuildbcd

这些命令将备份当前的 BCD 文件,并创建一个新的空白文件。然后它们将扫描系统中所有 Windows 安装,并将其添加到新的 BCD 文件中。

  1. 最后,重新启动计算机以检查是否已解决启动问题。

 

针对UEFI引导的问题,您可以尝试以下方法来修复:

  1. 进入计算机的UEFI设置:首先需要进入计算机的UEFI设置界面,在计算机启动时按下正确的键(通常是Del或F2键),进入UEFI设置。

  2. 恢复默认设置:在UEFI设置界面中,找到恢复默认设置的选项,确认并保存更改。

  3. 重新设置引导顺序:如果默认设置没有成功解决问题,您可以尝试重新设置启动顺序。在UEFI设置界面中,找到引导选项,并使用方向键将Windows Boot Manager或硬盘驱动器排在最前面。

  4. 重建BCD文件:如果以上方法都无法解决问题,则可以尝试重建启动配置数据(BCD)文件。进入恢复环境后,选择“疑难解答” > “高级选项” > “命令提示符”,然后输入以下命令:

Copy Code
bootrec /fixmbr
bootrec /fixboot
bootrec /rebuildbcd

这些命令将修复Master Boot Record(MBR)和启动扇区,并重建BCD文件,以帮助解决UEFI引导问题。

  1. 最后,重启计算机,检查问题是否已解决。

修复 Master Boot Record(MBR)、启动扇区,并重建 BCD 文件以解决 UEFI 引导问题,您可以使用以下批处理文件(.cmd)或 PowerShell 脚本。以下是两个示例,分别用于这两种方法。

方法 1:使用批处理文件 (.cmd)

以下是一个批处理文件示例,用于修复 MBR、启动扇区并重建 BCD 文件:

 
batchCopy
@echo off
setlocal enabledelayedexpansion

echo 正在修复 MBR、启动扇区和 BCD...

:: 确保以管理员身份运行
if not "%1"=="runas" (
    echo 以管理员身份重新启动...
    powershell -Command "Start-Process '%~f0' -ArgumentList 'runas' -Verb RunAs"
    exit /b
)

:: 日志文件
set LOGFILE=%TEMP%\mbr_repair_log.txt
echo 修复开始时间: %DATE% %TIME% > %LOGFILE%

:: 修复 MBR
echo 修复 MBR... >> %LOGFILE%
bootrec /fixmbr >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo MBR 修复失败,请检查日志文件。 >> %LOGFILE%
    exit /b
)

:: 修复启动扇区
echo 修复启动扇区... >> %LOGFILE%
bootrec /fixboot >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo 启动扇区修复失败,请检查日志文件。 >> %LOGFILE%
    exit /b
)

:: 重建 BCD
echo 重建 BCD... >> %LOGFILE%
bootrec /rebuildbcd >> %LOGFILE% 2>&1
if errorlevel 1 (
    echo BCD 重建失败,请检查日志文件。 >> %LOGFILE%
    exit /b
)

echo 修复完成。 >> %LOGFILE%
echo 日志文件位于: %LOGFILE%
pause

方法 2:使用 PowerShell 脚本

以下是一个 PowerShell 脚本示例,用于执行相同的修复操作:

 
powershellCopy
# 确保以管理员身份运行
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

$logFile = "$env:TEMP\mbr_repair_log.txt"
"修复开始时间: $(Get-Date)" | Out-File -FilePath $logFile -Encoding utf8

# 修复 MBR
"修复 MBR..." | Out-File -FilePath $logFile -Append -Encoding utf8
try {
    bootrec /fixmbr | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "MBR 修复失败: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    exit
}

# 修复启动扇区
"修复启动扇区..." | Out-File -FilePath $logFile -Append -Encoding utf8
try {
    bootrec /fixboot | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "启动扇区修复失败: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    exit
}

# 重建 BCD
"重建 BCD..." | Out-File -FilePath $logFile -Append -Encoding utf8
try {
    bootrec /rebuildbcd | Out-File -FilePath $logFile -Append -Encoding utf8
} catch {
    "BCD 重建失败: $_" | Out-File -FilePath $logFile -Append -Encoding utf8
    exit
}

"修复完成。" | Out-File -FilePath $logFile -Append -Encoding utf8
Write-Host "修复完成,日志文件位于: $logFile"

使用说明

  1. 创建文件

    • 将上述代码分别复制到文本编辑器中,并保存为 repair_mbr.cmd 或 repair_mbr.ps1
  2. 运行文件

    • 右键点击文件,选择“以管理员身份运行”。

注意事项

  • 请确保在执行这些命令之前备份重要数据。
  • 这些命令假设您正在修复的系统是当前启动的系统。如果您在其他环境中运行这些命令,可能需要调整。
posted @ 2023-05-29 08:02  suv789  阅读(791)  评论(0)    收藏  举报