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

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  阅读(403)  评论(0)    收藏  举报