无忧启动论坛

 找回密码
 注册
搜索
一次装机 终生领工资最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
诚聘PE工具开发技术员QQ:1607112133系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
查看: 2281|回复: 25

判断当前系统是BIOS启动还是UEFI启动,是Windows还是PE,内存和磁盘空间情况(by双...

  [复制链接]
发表于 2019-1-1 09:55:00 | 显示全部楼层 |阅读模式
本帖最后由 liuzhaoyzz 于 2019-1-8 18:22 编辑

判断当前系统是BIOS启动还是UEFI启动,是Windows还是PE,内存和磁盘空间情况(by双心)

    写批处理的兄弟可能经常会碰到需要判断当前系统是BIOS启动还是UEFI启动,可能还要判断当前系统是正常的Windows还是PE,有人用bcdedit来判断,但是PE或者某些系统因为一些问题可能会导致bcdedit运行不了而影响判断,而且很多PE不支持wmic,难以判断内存和磁盘空间情况。我用AU3写了个小程序,在资源管理器里面直接双击就能看到当前系统是BIOS启动还是UEFI启动,同时还会显示当前是正常的Windows还是PE。它同时支持命令行,随便带个非空白的参数就可以在批处理中调用,已测试的系统:BIOS和UEFI启动的WIN7 8 10及PE,BIOS启动的XP/03。只需要一个500KB的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。
    双击GUI界面(中文).png 双击GUI界面(英文).png

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

bootmode带参数运行.png

    在批处理中调用示例代码:

  1. @echo off
  2. bootmode 1|find /i "PE" && echo WinPE || echo 正常的Windows

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

  9. for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "VolumeLabel"') do set vc=%%i
  10. echo C:盘标签:%vc%
  11. for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "TotalSpace"') do set tc=%%i
  12. echo C:盘总大小%tc%MB
  13. for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "FreeSpace"') do set fc=%%i
  14. echo C:盘可用空间%fc%MB
  15. for /f "tokens=3 delims=:" %%i in ('bootmode C:^|find /i "Usedspace"') do set uc=%%i
  16. echo C:盘已用空间%uc%MB

  17. for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "VolumeLabel"') do set vc=%%i
  18. echo D:盘标签:%vc%
  19. for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "TotalSpace"') do set tc=%%i
  20. echo D:盘总大小%tc%MB
  21. for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "FreeSpace"') do set fc=%%i
  22. echo D:盘可用空间%fc%MB
  23. for /f "tokens=3 delims=:" %%i in ('bootmode D:^|find /i "Usedspace"') do set uc=%%i
  24. echo D:盘已用空间%uc%MB

  25. for /f "tokens=1,8 delims=: " %%i in ('bootmode 1^|find /i "maximum"') do (
  26. set disk=%%i
  27. set FreespaceMAX=%%j)
  28. echo %disk%盘可用空间最大,为%FreespaceMAX%

  29. bootmode C:|find /i "BIOS" && goto :BIOS || goto :UEFI

  30. :BIOS
  31. echo BIOS启动
  32. pause
  33. exit /b

  34. :UEFI
  35. echo UEFI启动
  36. pause
  37. exit /b
复制代码

批处理示例.png

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

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

BootMode1.2.rar

505.76 KB, 下载次数: 216, 下载积分: 无忧币 -2

评分

参与人数 5无忧币 +21 收起 理由
maomihuacha + 1
Mindfly + 5 赞一个!
新空气 + 5 神马都是浮云
董大 + 5 很给力!
20090101 + 5 很给力!

查看全部评分

 楼主| 发表于 2019-1-1 09:55:06 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-1-3 22:42 编辑

二楼备用
希望新手问关于RAMOS制作的时候,用Bootmode.exe运行下截个图,便于大家尽快定位问题。
回复

使用道具 举报

发表于 2019-1-1 09:58:51 | 显示全部楼层
涨姿势了,顶
回复

使用道具 举报

发表于 2019-1-1 10:14:57 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2019-1-1 10:38:50 | 显示全部楼层
API  GetFirmwareEnvironmentVariableA   不谢
回复

使用道具 举报

发表于 2019-1-1 13:03:08 | 显示全部楼层
谢谢分享,辛苦啦
回复

使用道具 举报

发表于 2019-1-1 13:58:27 | 显示全部楼层
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”文件夹。
回复

使用道具 举报

 楼主| 发表于 2019-1-1 14:39:28 | 显示全部楼层
    你说的这个方法不能针对正常的windows,只能针对一部分PE,有的PE即使运行了wpeutil UpdateBootInfo,
reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType 键值也有可能不存在。   
回复

使用道具 举报

发表于 2019-1-1 14:40:27 | 显示全部楼层
学习了
回复

使用道具 举报

发表于 2019-1-1 18:35:56 | 显示全部楼层
我想知道怎么判断当前UEFI启动是否为   安全启动

点评

https://technet.microsoft.com/zh-cn/library/dn938357(v=sql.85)#SecureBootAPIs [attachimg]384759[/attachimg]  详情 回复 发表于 2019-1-2 18:29
我也在研究 不过我找到的是Windows PowerShell脚本 而且还不知道是不是 https://docs.microsoft.com/zh-cn/previous-versions/windows/powershell-scripting/jj603042(v%3dwps.620) 我的运行后是这样的 [atta  详情 回复 发表于 2019-1-2 18:20
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持本站|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2019-3-19 16:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表