5

使用 ImageX 和 WIM 重建 HDD 后,BCD 有时会损坏。因此,我需要从在命令提示符下无人值守运行的脚本重新构建 BCD。

下面的代码在手动输入时完成了这项工作。我需要帮助来自动化它(进一步参见下面的代码示例):

bootrec.exe /fixmbr
bootsect.exe /nt60 all /force
attrib -h -s C:\boot\BCD
del C:\boot\BCD
bcdedit.exe /createstore c:\boot\bcd.temp
bcdedit.exe /store c:\boot\bcd.temp /create {bootmgr} /d "Windows Boot Manager"
bcdedit.exe /import c:\boot\bcd.temp
bcdedit.exe /set {bootmgr} device partition=C:
bcdedit.exe /timeout 10
attrib -h -s C:\boot\bcd.temp
del c:\boot\bcd.temp
bcdedit.exe /create /d "Microsoft Windows" /application osloader
bcdedit.exe /set {GUID} device partition=C:
bcdedit.exe /set {GUID} osdevice partition=C:
bcdedit.exe /set {GUID} path \Windows\system32\winload.exe
bcdedit.exe /set {GUID} systemroot \Windows
bcdedit.exe /displayorder {GUID}

如上所述,我需要在无人值守的命令提示符下运行它。最后第 6 条语句“bcdedit.exe /create /d "Microsoft Windows" /application osloader”的输出是新创建的 GUID。以下命令中需要此 ID。

如何将这个新的 GUID 从 bcdedit 加载到可以在以下代码中调用的变量?

最好的问候 Henrik V. Nielsen

4

5 回答 5

4

如果其他人应该面临同样的问题,我通过添加以下行来解决它。

For /F "tokens=2 delims={}" %%i in ('bcdedit.exe') do (set _NEWGUID=%%i)

这是因为文件中只有一个 GUID。

于 2016-05-12T10:29:13.533 回答
0

有一种更简单的方法可以修复 BCD。

bcdboot c:\windows 

例如替换问题中的所有 bcdedit 命令。

请参阅使用 bcdboot 修复 BCD的说明。

实用程序 bcdboot 和 bootsect 可以修复所有引导问题(关于初始引导顺序)。

sfc.exe 可以修复损坏的系统文件。

于 2017-08-31T06:50:24.573 回答
0

这是基于 Henrik 代码的解决方案

这会将 BCD 创建的 GUID 转换为文本文件,for 循环从文件中获取 GUID

bootrec.exe /fixmbr
bootsect.exe /nt60 all /force
attrib -h -s C:\boot\BCD
del C:\boot\BCD
bcdedit.exe /createstore c:\boot\bcd.temp
bcdedit.exe /store c:\boot\bcd.temp /create {bootmgr} /d "Windows Boot Manager"
bcdedit.exe /import c:\boot\bcd.temp
bcdedit.exe /set {bootmgr} device partition=C:
bcdedit.exe /timeout 10
attrib -h -s C:\boot\bcd.temp
del c:\boot\bcd.temp
bcdedit.exe /create /d "Microsoft Windows" /application osloader>GUID.txt
For /F "tokens=2 delims={}" %%i in (GUID.txt) do (set _NEWGUID=%%i)
bcdedit.exe /set %_NEWGUID% device partition=C:
bcdedit.exe /set %_NEWGUID% osdevice partition=C:
bcdedit.exe /set %_NEWGUID% path \Windows\system32\winload.exe
bcdedit.exe /set %_NEWGUID% systemroot \Windows
bcdedit.exe /displayorder %_NEWGUID%
于 2016-12-08T21:41:19.420 回答
0

Dylan Grasha 您的答案有一些错误,我添加了一些增强功能以​​使其更加完整。

@Echo Off
bootrec.exe /fixmbr
bootsect.exe /nt60 C: /force
attrib -h -s C:\boot\BCD
del C:\boot\BCD
attrib -h -s C:\boot\bcd.temp >nul
del C:\boot\bcd.temp >nul
bcdedit /createstore c:\boot\bcd.temp
bcdedit.exe /store c:\boot\bcd.temp /create {bootmgr} /d "Windows Boot Manager"
bcdedit.exe /import c:\boot\bcd.temp
bcdedit.exe /set {bootmgr} device partition=C:
bcdedit.exe /timeout 10
attrib -h -s C:\boot\bcd.temp
del c:\boot\bcd.temp
bcdedit.exe /create /d "Microsoft Windows" /application osloader>GUID.txt
For /F "tokens=2 delims={}" %%i in (GUID.txt) do (set _NEWGUID=%%i)
bcdedit.exe /set {%_NEWGUID%} device partition=C:
bcdedit.exe /set {%_NEWGUID%} osdevice partition=C:
bcdedit.exe /set {%_NEWGUID%} path \Windows\system32\winload.exe
bcdedit.exe /set {%_NEWGUID%} systemroot \Windows
bcdedit.exe /displayorder {%_NEWGUID%}
del guid.txt
cmd
于 2017-02-22T20:26:56.460 回答
0

有一种更简单的方法。

创建新条目时,BCD 接受表单aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee中的所有 GUID (位数8-4-4-4-12

这意味着您可以定义 GUID,而不必使用 For 循环搜索 GUID。

它对我有用。

于 2016-09-16T09:12:13.107 回答