【问题标题】:Scripting with bcdedit使用 bcdedit 编写脚本
【发布时间】:2016-09-04 02:48:49
【问题描述】:

使用 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 加载到可以在以下代码中调用的变量中?

最好的问候 亨利克诉尼尔森

【问题讨论】:

  • 你好。我忘了提到操作系统是 Win7 Embedded 32bit。我正在从 WinPE USB 磁盘运行脚本。

标签: command-line command-line-interface command-prompt bcdedit


【解决方案1】:

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

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

这是可行的,因为文件中只有一个 GUID。

【讨论】:

    【解决方案2】:

    有一个更简单的方法。

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

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

    它对我有用。

    【讨论】:

    • 您好,netlord 先生,听起来很有趣。下次需要更新脚本时我会尝试实现。
    【解决方案3】:

    这是一个基于 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%
    

    【讨论】:

      【解决方案4】:

      迪伦·格拉沙 您的回答有一些错误,我添加了一些增强功能以​​使其更加完整。

      @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
      

      【讨论】:

        【解决方案5】:

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

        bcdboot c:\windows 
        

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

        查看using bcdboot to fix BCD的解释。

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

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

        【讨论】:

          猜你喜欢
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 2015-05-23
          • 2015-05-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多