5

Nach dem Neuaufbau einer Festplatte mit ImageX und einem WIM wird die BCD manchmal beschädigt. Ich muss daher den BCD aus einem Skript, das in einer Eingabeaufforderung unbeaufsichtigt ausgeführt wird, neu erstellen.Skripterstellung mit bcdedit

Der folgende Code erledigt den Job, wenn er manuell eingegeben wird. Ich brauche Hilfe, um es zu automatisieren (siehe weiter unten Codebeispiel):

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} 

Wie begann oben, ich brauche dies in einer unbeaufsichtigten Eingabeaufforderung auszuführen. Die Ausgabe von der 6. letzten Anweisung "bcdedit.exe/create/d" Microsoft Windows "/ Anwendung osloader" ist eine neu erstellte GUID. Diese ID wird in den folgenden Befehlen benötigt.

Wie lade ich diese neue GUID von bcdedit zu einer Variablen, die ich im folgenden Code aufrufen kann?

Mit freundlichen Grüßen Henrik V. Nielsen

+0

Hallo. Ich habe vergessen zu erwähnen, dass das Betriebssystem Win7 Embedded 32bit ist. Ich führe das Skript von einer WinPE-USB-Festplatte aus. –

Antwort

4

Wenn andere vor dem gleichen Problem sollte, löste ich es durch die folgende Zeile hinzufügen.

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

Dies funktioniert, weil es nur eine GUID in der Datei gibt.

0

gibt es einen einfacheren Weg.

Wenn Sie einen neuen Eintrag BCD Erstellung akzeptiert alle GUIDs in dem Formular AAAAAAAA-bbbb-CCCC-dddd-eeeeeeeeeeee (Anzahl der Ziffern 8-4-4-4-12)

Dies bedeutet für Sie kann eine GUID definieren und muss die GUID nicht mit der For-Schleife suchen.

Es funktioniert für mich.

+0

Hallo Herr Netlord, Klingt interessant. Ich werde versuchen, das nächste Mal zu implementieren, wenn ich das Skript aktualisieren muss. –

0

Dies ist eine Lösung auf Henriks Code basiert

Diese die GUID aus BCD in eine Textdatei und die for-Schleife wird die GUID aus der Datei

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 Ihre Antwort hat erstellt nimmt einige Fehler und ich habe einige Verbesserungen hinzugefügt, um es vollständiger zu machen.

@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

Es gibt einen einfacheren Weg zur Befestigung von BCD.

bcdboot c:\windows 

zum Beispiel ersetzt alle bcdedit Befehle aus Frage.

Siehe Erläuterungen zu using bcdboot to fix BCD.

Die Dienstprogramme bcdboot und bootsect können alle Bootprobleme beheben (in Bezug auf die anfängliche Startsequenz).

sfc.exe kann beschädigte Systemdateien reparieren.

Verwandte Themen