Stellen Sie das Startskript in WinPE ein, um anzuzeigen, in welchem ​​Modus der PC gestartet ist

1117
elgato

Hallo allerseits,

Ich versuche, ein WinPE-Iso zu erstellen und zu testen, ob es im BIOS oder im UEFI-Modus gestartet wurde. Derzeit kann ich dies mit dem folgenden Befehl testen:

reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType 

Dieser Befehl wird zurückgegeben, 0x1wenn der PC im BIOS-Modus oder 0x2im UEFI-Modus gestartet wird.

Technet zeigt ein Skript, um dies automatisch anzuzeigen, nachdem WinPE gestartet wurde, indem es zu startnet.cmd hinzugefügt wird:

wpeutil UpdateBootInfo for /f "tokens=2* delims= " %%A in ('reg query HKLM\System \CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B :: Note: delims is a TAB followed by a space. if %Firmware%==0x1 echo The PC is booted in BIOS mode. if %Firmware%==0x2 echo The PC is booted in UEFI mode. 

Wenn ich jedoch die WinPE hochfahre, zeigt die cmd diesen Fehler:

X:windows\system32>wpeinit UpdateBootInfo  X:\windows\system32>for /F "tokens=2* delims= " %A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%B  echo was unexpected at this time. X:\windows\system32>if ==0x1 echo The PC is booted in BIOS mode. X:\windows\system32>_ 

Kann mir jemand helfen?

Vielen Dank!

1
Ich denke, es hängt damit zusammen, wie die ifs ausgewertet werden: wenn% Firmware% == 0x1, aber ich bin mir nicht sicher. elgato vor 8 Jahren 0
Ihr `for`-Befehl schlägt fehl, daher wird` Firmware` nicht eingestellt. DavidPostill vor 8 Jahren 0

2 Antworten auf die Frage

0
rst_ack

Ich konnte das Skript korrigieren, indem der Leerraum in Ihrer delims-Variable ersetzt und ein Tab und ein Leerzeichen an seine Stelle gesetzt wurden.

wpeutil UpdateBootInfo for /f "tokens=2* delims= " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B  if %Firmware%==0x1 echo The PC is booted in BIOS mode. if %Firmware%==0x2 echo The PC is booted in UEFI mode. 

** HINWEIS: ** Ich habe das Skript in notepad.exe bearbeitet, um eine korrekte Kodierung sicherzustellen. Ein Kopieren / Einfügen des obigen Codes funktioniert möglicherweise nicht.

-1
sam

Hatte das gleiche Problem, weil ich den Text buchstäblich kopiert / eingefügt hatte. Leider gibt es im Technet-Beispiel (2) Leerzeichen nach "delims". Ändern Sie das erste Leerzeichen in eine Registerkarte, und dies sollte korrigiert werden. Es gibt sogar die Notiz, die es erwähnt; es war ein langer Tag. Vergewissern Sie sich, dass Sie NICHT die größeren / kleineren Zeichen als "<" und ">" angeben.

for / f "tokens = 2 * delims =" %% A ....