5

Dopo la ricostruzione di un HDD utilizzando ImageX e un WIM, il BCD a volte viene danneggiato. Quindi ho bisogno di ricostruire il BCD da uno script in esecuzione automatica in un prompt dei comandi.Script con bcdedit

Il codice seguente fa il lavoro, se inserito manualmente. Ho bisogno di aiuto per automatizzare esso (vedi più avanti esempio di codice):

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} 

Come ha iniziato in precedenza, ho bisogno di eseguire questo in un prompt dei comandi incustodita. L'output della 6a ultima istruzione "bcdedit.exe/create/d" Microsoft Windows "/ application osloader" è un GUID appena creato. Questo ID è necessario nei seguenti comandi.

Come caricare questo nuovo GUID da bcdedit in una variabile Posso chiamare il seguente codice?

migliori saluti Henrik V. Nielsen

+0

Ciao. Ho dimenticato di menzionare che il sistema operativo è Win7 Embedded 32bit. Sto eseguendo lo script da un disco USB WinPE. –

risposta

4

Se altro dovrebbe affrontare lo stesso problema, ho risolto aggiungendo la seguente riga.

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

Ciò funziona perché nel file è presente un solo GUID.

0

c'è un modo più semplice.

Quando si crea una nuova voce di BCD accetta tutti i GUID nel modulo aaaaaaaa-BBBB-cccc-dddd-eeeeeeeeeeee (numero di cifre 8-4-4-4-12)

Questo significa che si può definire un GUID e non deve cercare il GUID con il For-Loop.

Funziona per me.

+0

Hello mr netlord, Sembra interessante. Cercherò di implementare la prossima volta che ho bisogno di aggiornare lo script. –

0

Si tratta di una soluzione basata sul codice di Henrik

Questo prende il GUID creato da BCD in un file di testo e il ciclo for ottiene il GUID dal file

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

Dylan Grasha La tua risposta è alcuni errori e ho aggiunto alcuni miglioramenti per renderlo più completo.

@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

C'è un modo più semplice per fissare BCD.

bcdboot c:\windows 

sostituisce ad esempio tutti i comandi bcdedit dalla domanda.

Vedere le spiegazioni per using bcdboot to fix BCD.

Le utilità bcdboot e bootsect possono correggere tutti i problemi di avvio (relativi alla sequenza di avvio iniziale).

sfc.exe può correggere i file di sistema danneggiati.