|
本帖最后由 quya 于 2018-1-13 10:01 编辑
这个问题问得可能有点大,而且要精确判断比较困难。
在自动分区并想把硬盘格式化的时候,想到了我应该用MBR传统分区呢还是GPT分区?
我初步的设想是获得BIOS版本号或者日期,在2011年之后的大概可以用GPT分区,或者保险点2012年。
一个最容易想到的命令是 systeminfo, 然后提取Bios版本号最后几位数字,就知道是那一年的,其次是wmic命令。
但上述命令在很多PE下是不支持的,所以我认为既然得到精确的判断很困难,我索性再模糊一点,用CPU型号来大致判断机器的新旧。
比如 set 命令, 获取PROCESSOR_REVISION 参数, 对intel CPU 而言,如果是参数3xxx,那么应该能支持GPT(我猜测的,不对的情况请大家指正), 但对AMD CPU, 我不知道数字是什么。 能够判断的几个变量还有PROCESSOR_IDENTIFIER等,但最直观的我觉得还是PROCESSOR_REVISION 参数, 为此我在网上搜索了下, 但无法得到有效的数据。
所以,请大家八仙过海,各显神通, 如何简单地实现我标题所说的问题, 不求精确,只求简单,通用性强。
另, 有无简单办法判断机器内存大小? 同样需要通用性。
下面很多人问我要这样做干嘛, 如果只是偶尔装个系统,当然用不着这么复杂,但在大量部署系统的时候就用得着了,所以进bios看一看什么的没什么实际意义, 懂bios的人还要什么批处理, 大多数批处理就是在即使非专业的人操作之下,也不会有什么大的错误。 所以批处理是我做的, 但用的人可能连怎么进BIOS都不知道。
各位原意帮忙的我十分感谢, 但无法帮忙的请不要说这样做毫无意义等这样的话, 我不想再浪费时间辩解这样做是否有意义, 我只是需要方法。 退一万步说, 我要这样的代码纯粹只是自娱自乐, 行吗?
根据大家的意见,目前代码如下:
- set isUEFI=False
- bcdedit /enum {current} |find "winload.efi">nul 2>&1 &&set isUEFI=True
- if %PROCESSOR_REVISION:~0,1% gtr 2 set isUEFI=True
复制代码
以上代码对intel CPU来说, 应该有90%的准确率, 当%PROCESSOR_REVISION:~0,1% ==2 的时候, 有部分支持UEFI,这部分只好放弃判断。
有谁有AMD的资料?
一个需要技巧和资料方面的批处理, 却变成了讨论其他问题, 难道大家都乐意回答一些初级问题?我就不信无忧启动论坛会差到这种地步。
有坛友在三楼就已经明白了我的意思, 但很多坛友却还在讨论“如何判断当前系统是否是UEFI启动”, 这儿再重复一下,我的求助主题指的是BIOS(或者说机器),不是系统。
如果PE支持Systeminfo命令, 我自然不必大费周章(见下列代码,可以得出bios生产日期,假如值大于2011年,那么基本支持UEFI), 这就是为什么我寻找更通用代码的原因, 也算是一个挑战吧。
- for /f "tokens=1,2 delims=:" %i in ('systeminfo') do if "%i"=="BIOS 版本" set "biosver"="%j" &echo %biosver:~-10,4%
复制代码 |
|