无忧启动论坛

标题: 判断当前系统是BIOS启动还是UEFI启动,分区表是MBR还是GPT(by双心)V1.3 [打印本页]

作者: liuzhaoyzz    时间: 2019-1-1 09:55
标题: 判断当前系统是BIOS启动还是UEFI启动,分区表是MBR还是GPT(by双心)V1.3
本帖最后由 liuzhaoyzz 于 2020-11-9 08:48 编辑

判断当前系统是BIOS启动还是UEFI启动,是Windows还是PE,分区表是MBR还是GPT,内存和磁盘空间情况(by双心)
下载地址:https://lanzoux.com/b00na10sd
    写批处理的兄弟可能经常会碰到需要判断当前系统是BIOS启动还是UEFI启动,可能还要判断当前系统是正常的Windows还是PE,有人用bcdedit来判断,但是PE或者某些系统因为一些问题可能会导致bcdedit运行不了而影响判断,而且很多PE不支持wmic,难以判断内存和磁盘空间情况。我用AU3写了个小程序,在资源管理器里面直接双击就能看到当前系统是BIOS启动还是UEFI启动,同时还会显示当前是正常的Windows还是PE,显示分区表是MBR还是GPT。它同时支持命令行,随便带若干个个盘符就可以在批处理中调用,已测试的系统:BIOS和UEFI启动的WIN7 8 10及PE,BIOS启动的XP/03。只需要一个BootMode.exe即可。

        结果会依次显示(为了方便中英文系统使用,命令行关键字直接用的是英文,对话框用的是中文):
        1、BIOS/UEFI启动,是windows还是PE,结果会有BIOS Windows(PE),UEFI Windows(PE),Unknown Windows(PE)这几种情况。
        2、TotalMemory总内存,FreeMemory可用内存,UsedMemory已用内存。
        3、后面各磁盘的TotalSpace总空间、FreeSpace可用空间、Usedspace已用空间。
        4、显示可用空间最大FreespaceMAX的那个硬盘的盘符disk。

   

    在命令行中运行(支持多个参数):
  1. BootMode c: d: e: f:
复制代码



    在批处理中调用示例代码:
[code]
@echo off
bootmode C: 1>NUL 2>NUL|find /i "PE" && echo WinPE || echo 正常的Windows

for /f "tokens=2 delims=:" %%i in ('bootmode C:^|find /i "TotalMemory"') do set tm=%%i
echo 总内存%tm%MB
for /f "tokens=2 delims=:" %%i in ('bootmode C:^|find /i "FreeMemory"') do set fm=%%i
echo 可用内存%fm%MB
for /f "tokens=2 delims=:" %%i in ('bootmode C:^|find /i "UsedMemory"') do set um=%%i
echo 已用内存%um%MB

for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "VolumeLabel"') do set vc=%%i
echo C:盘标签:%vc%
for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "TotalSpace"') do set tc=%%i
echo C:盘总大小%tc%MB
for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "FreeSpace"') do set fc=%%i
echo C:盘可用空间%fc%MB
for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "Usedspace"') do set uc=%%i
echo C:盘已用空间%uc%MB
for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "PartitionType"') do set pc=%%i
echo C:盘分区表类型:%pc%

for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "VolumeLabel"') do set vc=%%i
echo D:盘标签:%vc%
for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "TotalSpace"') do set tc=%%i
echo D:盘总大小%tc%MB
for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "FreeSpace"') do set fc=%%i
echo D:盘可用空间%fc%MB
for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "Usedspace"') do set uc=%%i
echo D:盘已用空间%uc%MB
for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "PartitionType"') do set pc=%%i
echo D:盘分区表类型:%pc%

for /f "tokens=1,8 delims=: " %%i in ('bootmode 1^|find /i "maximum"') do (
set disk=%%i
set FreespaceMAX=%%j)
echo %disk%盘可用空间最大,为%FreespaceMAX%GB
bootmode C:|find /i "BIOS" && goto :BIOS || goto :UEFI

:BIOS
echo BIOS启动
pause
exit /b

:UEFI
echo UEFI启动
pause
exit /b



    判断的原理,在此表示感谢!
1、如何判断PE是以UEFI还是BIOS方式启动http://bbs.wuyou.net/forum.php?m ... 1744&fromuid=298214
2、关于windows pe 运行环境的判断 - PE讨论区 - 无忧启动论坛http://bbs.wuyou.net/forum.php?m ... 2924&fromuid=298214

        我为什么要发布到RAMOS专区?这个判断和RAMOS有关系吗?
    答:当然有关系。因为一键是调用的bcdedit来判断当前系统是BIOS启动还是UEFI启动,可能还要判断当前系统是正常的Windows还是PE,但是PE或者某些系统因为一些问题可能会导致bcdedit运行不了而影响判断。于是我就写了这个小程序。RAMOS制作现在百花齐放,有很多兄弟基于不同的方案写了不同的批处理,可能都需要判断BIOS启动还是UEFI启动,我这个小程序也算为需要的朋友提供一个可供选择的方案。


BootMode1.3.rar

502.13 KB, 下载次数: 651, 下载积分: 无忧币 -2


作者: liuzhaoyzz    时间: 2019-1-1 09:55
本帖最后由 liuzhaoyzz 于 2019-8-1 21:21 编辑

二楼备用
希望新手问关于RAMOS制作的时候,用Bootmode.exe运行下截个图,便于大家尽快定位问题。
一键3.7.8以及之后的版本已采用Bootmode.exe代替bcdedit来判断BIOS/UEFI启动。避免出现“找不到操作数”的现象出现。

作者: idea2k    时间: 2019-1-1 09:58
涨姿势了,顶
作者: 2010sya    时间: 2019-1-1 10:14
谢谢分享
作者: 2012jiashanni    时间: 2019-1-1 10:38
API  GetFirmwareEnvironmentVariableA   不谢
作者: 董大    时间: 2019-1-1 13:03
谢谢分享,辛苦啦
作者: chishingchan    时间: 2019-1-1 13:58
msdn.microsoft.com
WinPE:在 UEFI 或旧版 BIOS 模式下启动
在 UEFI 电脑上启动 Windows PE 时,可能需要检查电脑是在 UEFI 模式下还是在旧版 BIOS 兼容性模式下启动。
例如,通过 Windows PE 运行 Windows 安装程序要求你使用正确的固件模式。
对于许多操作,例如通过使用 Diskpart 和 DISM 来应用 Windows 映像,固件模式可能不会导致差异。
Dn938383.wedge(zh-cn,VS.85).gif启动到 UEFI 模式
启动 PC 时,可能需要手动选择 UEFI 启动文件:\EFI\BOOT\BOOTX64.EFI。
启动你的 PC,并通过按键进入固件菜单(示例:Esc、F2、F9、F12)。
查找用于选择启动文件(示例:启动到文件、启动到 EFI 文件)的固件选项。
从 USB 驱动器选择文件:\EFI\BOOT\BOOTX64.EFI。
Dn938383.wedge(zh-cn,VS.85).gif检测使用 BIOS 还是 UEFI 模式启动 Windows PE
检查 HKLM\System\CurrentControlSet\Control\PEFirmwareType 注册表值来查看电脑是启动到 UEFI 模式还是 BIOS 模式。请注意:可能需要运行 wpeutil UpdateBootInfo 来确保该值存在。
reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType
如果 PC 启动到 BIOS 模式,该命令将返回“0x1”,如果启动到 UEFI 模式,将返回“0x2”。
示例脚本:
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.
如果这是常见问题,可以删除用于 UEFI 模式或 BIOS 模式的启动文件来防止 PC 在错误模式中启动。如果电脑固件设置为在错误模式下启动,介质将立即停止启动,这使你可以立即在正确模式下重新尝试启动电脑。
在 UEFI 模式下启动:要防止 Windows PE 在 BIOS 模式下启动,请删除介质根目录上的“bootmgr”文件。
在 BIOS 模式下启动:要防止 Windows PE 在 UEFI 模式下启动,请删除介质根目录上的“efi”文件夹。
作者: liuzhaoyzz    时间: 2019-1-1 14:39
    你说的这个方法不能针对正常的windows,只能针对一部分PE,有的PE即使运行了wpeutil UpdateBootInfo,
reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType 键值也有可能不存在。   

作者: 新空气    时间: 2019-1-1 14:40
学习了
作者: 红毛樱木    时间: 2019-1-1 18:35
我想知道怎么判断当前UEFI启动是否为   安全启动
作者: liuzhaoyzz    时间: 2019-1-1 19:46
         这个我就不懂了,我只是将原来的 理论程序化。      
作者: 苏州本是    时间: 2019-1-1 20:26
谢谢分享实用工具!
作者: devilma    时间: 2019-1-2 01:12
这个牛逼了!不错的说!
作者: eastmz    时间: 2019-1-2 07:13
这个不错
作者: huiyao_zhou    时间: 2019-1-2 08:17
支持原创
作者: 2012jiashanni    时间: 2019-1-2 18:20
红毛樱木 发表于 2019-1-1 18:35
我想知道怎么判断当前UEFI启动是否为   安全启动

我也在研究 不过我找到的是Windows PowerShell脚本 而且还不知道是不是
https://docs.microsoft.com/zh-cn/previous-versions/windows/powershell-scripting/jj603042(v%3dwps.620)


我的运行后是这样的

作者: 2012jiashanni    时间: 2019-1-2 18:29
红毛樱木 发表于 2019-1-1 18:35
我想知道怎么判断当前UEFI启动是否为   安全启动

https://technet.microsoft.com/zh-cn/library/dn938357(v=sql.85)#SecureBootAPIs


作者: 红毛樱木    时间: 2019-1-2 18:42
2012jiashanni 发表于 2019-1-2 18:29
https://technet.microsoft.com/zh-cn/library/dn938357(v=sql.85)#SecureBootAPIs

GetFirmwareEnvironmentVariableA
这个API还是没有具体说明呀
作者: 2012jiashanni    时间: 2019-1-2 19:33
红毛樱木 发表于 2019-1-2 18:42
GetFirmwareEnvironmentVariableA
这个API还是没有具体说明呀

我还在研究  研究出来告诉你
作者: liuzhaoyzz    时间: 2019-1-2 21:32
本帖最后由 liuzhaoyzz 于 2019-1-2 21:35 编辑

        RAMOS在BIOS和UEFI下启动模式天壤之别,BIOS是借助于g4d启动,没有问题的;UEFI是用ramdisk驱动中转,primo驱动切入,ramdisk驱动就会有类似于10PE下的那些怪毛病,开始菜单左键打不开,托盘区部分图标异常等。 这有点跑题了吧,可以去那个帖子讨论。BIOS UEFI都要重做的,不是简单的改启动菜单,你多看下RAMOS的帖子就明白了。几年时间的发展,RAMOS技术日新月异,很多当时流行的方案,现在几乎被全盘否定,不论是理论还是实战。不是几句话就能说清楚的。  
作者: liuzhaoyzz    时间: 2019-1-2 22:04
本帖最后由 liuzhaoyzz 于 2019-1-2 22:05 编辑

因为提到 BIOS UEFI 就顺便问了   看你回答   BIOS模式的无论32或64应该是
关机重启OK   新版开始菜单OK.
因为BIOS用的GRLDR也RAMDISK.SYS无关  (特指没用RAMDISK的P内存)

确实是这样子。

RAMOS制作最好安装个新系统到VHD中,不要在虚拟机中制作,因为虚拟机本身还要占用内存。目前UEFI-RAMOS制作,RP-WIMBOOT相对稳定。     

作者: wuyseekerr    时间: 2019-1-3 10:21
谢谢分享,学习了
作者: liuzhaoyzz    时间: 2019-1-3 11:08
frg521 发表于 2019-1-2 22:38
...

    我其实不知道你所说的样本是个什么样子的样本?重启蓝屏的截图已经有了啊。 因为RAMOS都是重启恢复的,dump之类的文件不能够被保存,你说的样本是什么?
这个问题要重现,只有你自己那边有环境才行。
不要用虚拟机测试,直接安装个新系统到vhd进行测试吧。   

作者: devilma    时间: 2019-2-8 15:05
学习了,收藏此贴
作者: gl542400    时间: 2019-2-10 22:38
ROMOS WIN10 X64 三杰LTSB2016
作者: 948311820    时间: 2019-3-21 11:29
小白一枚!正在研究怎么装RAMOS系统,谢谢大神
作者: ahxx    时间: 2019-8-1 17:26
感谢楼主的分享!
作者: jmb    时间: 2019-10-17 14:51
留存备用,谢谢
作者: 有阴也有阳    时间: 2019-10-17 15:20
感谢分享!
作者: 2012jimmywong    时间: 2019-11-1 15:42
我也支持支持一下
作者: hilsonma    时间: 2019-11-20 17:30
版主能不能出个更简化的版本,象detectefi32那样的,我只需要知道硬盘是mbr还是gpt.
作者: liuzhaoyzz    时间: 2019-11-21 15:00
不好意思才注意到你的回复。detectefi32是vc编译的,所以只有52KB,而bootmode是用au3写的,au3写的最小也有几百KB了。就是精简了其他功能,也还是有几百KB。我是业余程序员,搞不懂VC,能写个hello world就不错了。        
作者: hilsonma    时间: 2019-11-21 15:52
本帖最后由 hilsonma 于 2019-11-21 15:56 编辑

能简更好,不简也能用,感谢分享好工具。

简与不简的区别也不是很大,只是习惯性的有点轻微强迫症。
for /f %%a in ('detectefi32') do set bootdect=%%a
for /f "tokens=3 delims=:" %%i in ('bootmode %drv%:^|find /i "PartitionType"') do set pt=%%i

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414828
echo   如果是MBR硬盘就重建BIOS引导
for /f "tokens=3 delims=:" %%i in ('bootmode %drv%:^|find /i "PartitionType"') do set pt=%%i
if %pt%==MBR (
        if not exist %drv%:\Boot md %drv%:\Boot
        copy /y %bcd1% %drv%:\Boot
        if not exist %drv%:\bootmgr copy bootmgr8 %drv%:\bootmgr
)

作者: kobe1121    时间: 2019-11-23 08:33
感谢分享
作者: kobe1121    时间: 2019-12-18 15:11
谢谢分享,辛苦啦 新人要下载附件需要什么条件吗 为什么下载不了 有几个无忧币

作者: ddnflier    时间: 2019-12-19 09:58
每天来学习
作者: fxiaodi    时间: 2019-12-20 09:06
谢谢楼主的分享!!!!
作者: sonic613    时间: 2020-1-15 10:24
谢谢 大神的分享
作者: fastmazing    时间: 2020-1-20 09:27
有人百度网盘能分享一下吗?
作者: liuzhaoyzz    时间: 2020-1-20 13:34
本帖最后由 liuzhaoyzz 于 2020-6-6 22:21 编辑

下载地址:https://www.lanzoux.com/b00na10sd
一楼已更新添加兰奏云下载地址。里面分享的有plusv编写的bootmodecheck,只有2kb,调用方法类似,自己写批处理。或者先运行cmd,再运行bootmodecheck。

作者: rob0tom    时间: 2020-1-20 14:11
确实不错
作者: qxhdly    时间: 2020-2-11 00:35
谢谢分享,辛苦啦
作者: cbl    时间: 2020-3-2 19:19

作者: kensan    时间: 2020-3-2 19:40
谢谢分享,辛苦啦
作者: a992721506    时间: 2020-3-9 14:29
谢谢分享,拿走了
作者: 熄滅的蠟燭    时间: 2020-5-31 11:10
你帖子开头的蓝奏云下载地址里面的这个程序有问题,我的虚拟机明明是BIOS模式,它居然检测成了UEFI模式

作者: 熄滅的蠟燭    时间: 2020-5-31 11:21
我用了这个测试了一下,它这启动模式怎么还成了未知的

作者: luohanqing    时间: 2020-5-31 21:39
      在我这怎么就不准确,为什么是UEFI启动?BIOS也不是的。









作者: m84464772    时间: 2021-1-26 14:10
        神马都是浮云
作者: bfgxp    时间: 2021-3-22 19:03
竟然附上了au3源码,感谢版主,正需要,直接拿来用了
作者: 290903390    时间: 2021-3-28 19:54
好工具 666
作者: zjztiger    时间: 2021-4-29 11:52
支持一下!
作者: 2012飘水    时间: 2024-3-20 15:14
感谢楼主,学习了
作者: 2012飘水    时间: 2024-3-20 15:14
感谢楼主,学习了
作者: 2012飘水    时间: 2024-3-20 15:15
感谢楼主,学习了




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