无忧启动论坛

标题: 如何用批处理判断Bios是否支持UEFI启动? [打印本页]

作者: quya    时间: 2017-12-22 19:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 窄口牛    时间: 2017-12-22 19:42
无所谓的,能不能都可以,legacy加gpt或者efi加mbr都可以的。
作者: lintrainwy    时间: 2017-12-22 19:53
本帖最后由 comzhongwy 于 2017-12-22 19:54 编辑

判断Bios支不支持不好办,最好是进BIOS去看,但是判断当前启动方式比较简单

  1. @ECHO OFF
  2. set "isUEFI=true" &bcdedit /enum {current} |find "winload.exe">nul 2>&1 &&set "isUEFI=false"
  3. echo UEFI启动=%isUEFI%

  4. echo 查看可用内存
  5. typeperf "\Memory\Available bytes" -sc 1
  6. pause
复制代码

作者: chishingchan    时间: 2017-12-22 20:03
虫子樱桃的 AutoIt3 代码
  1. #include <WinAPI.au3>
  2. Global Const $ERROR_INVALID_FUNCTION=0x1
  3. DllCall("Kernel32.dll", "dword", "GetFirmwareEnvironmentVariableW", "wstr", "", "wstr", '{00000000-0000-0000-0000-000000000000}', "wstr", Null, "dword", 0)
  4. If _WinAPI_GetLastError() = $ERROR_INVALID_FUNCTION Then
  5.     MsgBox(0,'','Legacy BIOS')
  6. Else
  7.     MsgBox(0,'','UEFI Boot Mode')
  8. EndIf
复制代码

作者: lintrainwy    时间: 2017-12-22 20:08
chishingchan 发表于 2017-12-22 20:03
虫子樱桃的 AutoIt3 代码

用 AutoIt3 、aardio 之类就简单了,可是楼主要用批处理,还得简单,通用性强。
作者: quya    时间: 2017-12-22 20:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2017-12-22 21:19
我搜到一个注册表,我的机子上(支持UEFI),无论怎么设置,Win7还是8.1,键值不变,就是不知道是不是UEFI的判断依据,楼主或其他人可以试一下。Boot Architecture翻译过来就是“引导体系结构”,但是虚拟机里面貌似都是3

[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System]
"BootArchitecture"=dword:00000012
作者: 尼采1729    时间: 2017-12-22 21:20
一般的bios都会有的 实在不知道页可以找售后帮你查一查
作者: nttwqz    时间: 2017-12-22 21:23
楼主把WMIC加到自己的PE里面,什么都好办了。。。
作者: lintrainwy    时间: 2017-12-22 23:41
nttwqz 发表于 2017-12-22 21:19
我搜到一个注册表,我的机子上(支持UEFI),无论怎么设置,Win7还是8.1,键值不变,就是不知道是不是UEFI ...

我的笔记本是13,但是是支持 UEFI 的:
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System]
"BootArchitecture"=dword:00000013

作者: zengqcyxx    时间: 2017-12-23 01:04
要这么麻烦吗?弄一个支持EFI启动的WIN8X64PE放U盘,如果是台式机支持UEFI的话,你按F12,就有UEFI的启动信息。
作者: 窄口牛    时间: 2017-12-23 07:37
本帖最后由 窄口牛 于 2017-12-23 07:38 编辑

不如研究怎么让legacy下gpt分区的nt6启动。然后一律使用gpt分区就行了。
作者: nttwqz    时间: 2017-12-23 07:53
comzhongwy 发表于 2017-12-22 23:41
我的笔记本是13,但是是支持 UEFI 的:
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System]
"BootArchi ...

好吧,看来测试不出来这个键值的意思。
作者: nttwqz    时间: 2017-12-23 08:00
zengqcyxx 发表于 2017-12-23 01:04
要这么麻烦吗?弄一个支持EFI启动的WIN8X64PE放U盘,如果是台式机支持UEFI的话,你按F12,就有UEFI的启动信 ...

谁知道楼主要要干嘛,如果是装系统,在接触机器,用U盘启动的时候基本都能分辨是否支持了,哪里用得着批处理来判断什么费劲。
作者: zengqcyxx    时间: 2017-12-24 04:28
nttwqz 发表于 2017-12-23 08:00
谁知道楼主要要干嘛,如果是装系统,在接触机器,用U盘启动的时候基本都能分辨是否支持了,哪里用得着批 ...

既然人家都不懂,你给它弄个批处理,他还是不懂得怎么装系统。{:1_201:}
作者: lintrainwy    时间: 2017-12-24 10:08
最好就是利用GPT兼容MBR方案,0扇区写入gpt  4个分区信息(不过现在好像没分区工具支持,可能要写一个工具)和mbr引导,不支持GPT的bios也可以启动,至于系统启动后,应该和系统支不支持GPT有关了。
作者: faly    时间: 2017-12-24 10:37
尼采1729 发表于 2017-12-22 21:20
一般的bios都会有的 实在不知道页可以找售后帮你查一查

就服你
作者: plusv    时间: 2017-12-30 02:33
好文学习了.

作者: icevan    时间: 2018-1-10 21:45
GPT和MBR和UEFI有必然 的联系 吗?不支持UEFI的就不能用GPT了?
作者: icevan    时间: 2018-1-10 21:52
你有个误区。
我相信你的自动分区不会是dos环境下运行。
如果在PE里运行,根据你pe是UEFI启动还是BIOS启动就可以判断了。

作者: 江南一根葱    时间: 2018-1-11 16:09
bcdedit /enum {current}|find "system32\winload.exe">nul
if errorlevel 1 echo 当前模式为efi&&goto efi
if errorlevel 0 echo 当前模式为bios&&goto bios
我是这样简单“判断”的
作者: quya    时间: 2018-1-11 18:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: chiannet    时间: 2018-1-11 18:48
quya 发表于 2018-1-11 18:26
不是误区。

根据PE判断自然可以,但实际上在传统方式启动下PE, 并不表示不支持UEFI启动, 只是某些主 ...

是不是剑走偏锋了?没必要吧?


在USBOS v3.0下,是能够在启动流程中,即时、明确告诉操作者当前pe启动的模式:uefi or bios;即便没留意此信息,在使用winntsetup或dism++或Windows原配的setup.EXE部署系统时,都会自动或手动配置启动模式啊。需要干预吗?
作者: icevan    时间: 2018-1-11 22:13
quya 发表于 2018-1-11 18:26
不是误区。

根据PE判断自然可以,但实际上在传统方式启动下PE, 并不表示不支持UEFI启动, 只是某些 ...

所以说你进入误区了。。
传统模式和UEFI启动所用到的BCD内容是不一样的。
这样就可以判断了。当然通过winload.efi判断不行,双启的PE
都会有这两个文件。
现在回到你的问题,既然是傻瓜式的,那使用者就不会管是 那种方式启动的,
使用的是主机默认的启动模式,默认是UEFI优先启动就进入的是UEFI的PE。
你非要纠结主板支不支持UEFI,难道主机默认使用的传统模式优先,但又支持
UEFI,你还要让使用者修改BIOS???

作者: 窄口牛    时间: 2018-1-12 06:36
除非你的pe做成智能的,设定优先efi启动,efi启动不了才legacy启动,这样就能百分之百判断了。不管何种启动pe都可以做另一种启动方式的系统,所以凭pe判断就不是个事。
作者: quya    时间: 2018-1-12 08:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: quya    时间: 2018-1-12 08:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: quya    时间: 2018-1-12 08:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: chiannet    时间: 2018-1-12 08:42
quya 发表于 2018-1-12 08:16
各位原意帮忙的我十分感谢, 但无法帮忙的请不要说这样做毫无意义等这样的话, 我不想再浪费时间辩解这样做 ...


此问题的确存在不确定性。

我的周边AMD机器,粗略可以概括为970芯片组之后的主板,包括FM1、FM2及更新的版型基本都支持UEFI,从芯片组信息入手?因为从CPU不好确认,例如AMD Athlon64 II 215这样的CPU,就可以插在770---970众多型号的AM2---AM3+主板上。

作者: captain_g    时间: 2018-1-12 08:56
本帖最后由 captain_g 于 2018-1-12 09:02 编辑

微软说的:

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.


https://technet.microsoft.com/zh-cn/library/dn293283.aspx
作者: icevan    时间: 2018-1-12 23:50
我知道你的意思了 。
你是要知道主机是否支持UEFI。然后在这个基础上继续后面的操作。
前面你说不能确定PE是何种方式启动的。现在又要判断主机支持与否。
确实太高级了。。


作者: nttwqz    时间: 2018-1-13 18:51
既然如此,我也来娱乐一下,仅8.1x64测试过

  1. @echo off
  2. for /f "tokens=3" %%a in ('reg query HKLM\HARDWARE\DESCRIPTION\System\BIOS /v "BIOSReleaseDate" ^| find /i "reg_sz"') do for /f "tokens=3 delims=/-." %%b in ("%%a") do if "%%b" gtr "2011" (echo 支持UEFI!) else echo 不支持UEFI!
  3. pause
复制代码

作者: nttwqz    时间: 2018-1-13 19:30
我有个思路,虽然看似麻烦点!

安装系统时单独划分100M启动分区(MBR),利用bcdboot c:\windows /s z: /l zh-CN /f ALL来创建启动文件,这样无论是什么模式,都能启动。

离线挂载修改注册表,也可以不用,只要设法开机运行脚本即可(比如SetupComplete.cmd),这样便可以在完整系统下判断是否支持UEFI了,wmic、systeminfo之类等等随便用。

利用判断的结果再次利用修改启动文件打到优先使用UEFI的目的或者其他什么都行!

初步估计,你只需要一个SetupComplete.cmd即可实现。


这样就不用纠结是否WinPE这样不完整的环境的问题了。
作者: quya    时间: 2018-1-13 20:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: quya    时间: 2018-1-15 13:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2018-1-19 22:40
quya 发表于 2018-1-15 13:10
万分感谢, 应该是可行的。

1. 当硬盘是GPT的时候,PE以legacy方式启动,无法安装windows。 我没有尝 ...

已确定,不是一样的!

不过我想,算了,我不想了。

说不定,你也有N种系统的PE需要适配!
作者: nttwqz    时间: 2018-1-20 20:47
日期格式!
作者: quya    时间: 2018-1-20 21:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: nttwqz    时间: 2018-1-20 21:56
quya 发表于 2018-1-20 21:52
不会吧? 你那儿的日期格式是啥? 会不会和系统的设置有关?

如果只是在一些固定格式间变动,程序复杂 ...

XP中格式貌似是xx/xx/xx,具体记不清了。
作者: quya    时间: 2018-1-30 16:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: 双响炮    时间: 2018-5-13 17:04
微软直接有判断是否UEFI并自动分区的脚本呀
作者: pla66069    时间: 2018-5-22 20:25
谢谢分享,收藏备用




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3