5

После восстановления HDD с использованием ImageX и WIM BCD иногда повреждается. Поэтому мне нужно переустановить BCD из сценария, запускаемого без присмотра в командной строке.Сценарии с bcdedit

Приведенный ниже код выполняет задание при вводе вручную. Мне нужна помощь, чтобы автоматизировать его (см ниже пример кода):

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. Этот идентификатор необходим в следующих командах.

Как загрузить новый GUID из bcdedit в переменную, которую я могу вызвать в следующем коде?

С наилучшими пожеланиями Хенрик В. Нильсен

+0

Здравствуйте. Я забыл упомянуть, что ОС - это Win32 Embedded 32bit. Я запускаю скрипт с USB-диска WinPE. –

ответ

4

Если другие должны столкнуться с той же проблемой, я решил, добавив следующую строку.

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

Это работает, потому что в файле имеется только один GUID.

0

есть более простой способ.

При создании новой записи BCD принимает все GUIDs в форме аааааааа-BBBB-сссс-DDDD-eeeeeeeeeeee (количество цифр 8-4-4-4-12)

Это означает, что вы может определить GUID, не нужно искать GUID с помощью For-Loop.

Это работает для меня.

+0

Hello mr netlord, Звучит интересно. Я попытаюсь реализовать следующий раз, когда мне нужно обновить скрипт. –

0

Это решение, основанное на коде Хенрика

Это принимает идентификатор GUID, созданный из BCD в текстовый файл и цикл получает 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% 
0

Дилан 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 
0

Существует более простой способ крепления BCD.

bcdboot c:\windows 

, например, заменяет все команды bcdedit из вопроса.

См. Пояснения для using bcdboot to fix BCD.

Утилиты bcdboot и bootsect могут исправить все проблемы с загрузкой (относительно начальной последовательности загрузки).

sfc.exe может исправлять поврежденные системные файлы.