无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3874|回复: 12
打印 上一主题 下一主题

[求助] PECMD读取系统变量疑问

[复制链接]
跳转到指定楼层
1#
发表于 2020-7-14 15:49:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如标题所示:
想判断系统是否位64为系统时
使用命令:【FIND %PROCESSOR_ARCHITECTURE%="AMD64",MESS 是64位系统@提示: #OK!MESS 是32位(X86)系统@提示: #OK】
始终执行第2组命令,(如下图)

终究还是:百思不得其姐;
使用命令MESS 来看看%PROCESSOR_ARCHITECTURE% 到底是个什么东西,

看下图可知系统为Windows 7 X64,




回到问题:
%PROCESSOR_ARCHITECTURE%变量应该是 AMD64才对,可是为什么MESS 消息框中却显示x86呢?
有没有哪位大神解惑一下,非常感激!!!

2#
发表于 2020-7-14 16:10:42 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-7-14 16:11 编辑

%PROCESSOR_ARCHITECTURE%这个变量误导了很多人,其实这个变量返回值指的是当前命令解释器调用的是c:\windows\system32\cmd.exe还是c:\windows\syswow64\cmd.exe,对于64位windows系统,如果调用的c:\windows\system32\cmd.exe→%PROCESSOR_ARCHITECTURE%就是amd64;如果调用的是c:\windows\syswow64\cmd.exe→%PROCESSOR_ARCHITECTURE%=x86。
很多时候,我们要取得的不是这个值,而是要取得的操作系统的位数,就好像你截图里面的64位。
在批处理中,应该用这个变量来判断:%PROCESSOR_IDENTIFIER:~0,3%,如果是x86,肯定是32位;如果不是x86,肯定是64位操作系统。
pecmd应该也可以用类似的办法,就是截取
%PROCESSOR_IDENTIFIER%环境变量的前三个字符来判断是比较准确的

@echo off
rem 判断64位系统和32位系统
echo %PROCESSOR_IDENTIFIER%
if /i %PROCESSOR_IDENTIFIER:~0,3%==x86 (
        echo 32位操作系统
) else (
        echo 64位操作系统
)
pause

点评

感谢大师,让我明白了“知其然并知其所以然”, 我的疑问得到了超级版主的解惑,有点让我受宠若惊啊  详情 回复 发表于 2020-7-14 16:46
回复

使用道具 举报

3#
发表于 2020-7-14 16:10:42 | 只看该作者
因为你运行的是32位的PECMD,所以它拿到的值也是32的,你可以用&bX64判断,3=PECMD64 1=WIN64 0=WIN32

点评

谢谢了先,我试试看。  详情 回复 发表于 2020-7-14 16:18
回复

使用道具 举报

4#
 楼主| 发表于 2020-7-14 16:18:35 | 只看该作者
caocaofff 发表于 2020-7-14 16:10
因为你运行的是32位的PECMD,所以它拿到的值也是32的,你可以用&bX64判断,3=PECMD64 1=WIN64 0=WIN32

谢谢了先,我试试看。

点评

感谢大师了,按照你说的方法 用64位的PECMD就能够正常读取系统地方位数了, 相当的感谢,大谢。帮助解决了困扰我很久的问题了。  详情 回复 发表于 2020-7-14 16:56
回复

使用道具 举报

5#
发表于 2020-7-14 16:33:38 | 只看该作者
FIND $%PROCESSOR_ARCHITECTURE%=AMD64,MESS 是64位系统@提示: #OK!MESS 是32位(X86)系统@提示: #OK

点评

感谢红毛大师了, 你这方法我试过,一样不行的,问题就是我在64位系统中用的32位的pecmd程序了,所以读取的变量不是AMD64。  详情 回复 发表于 2020-7-14 16:59
回复

使用道具 举报

6#
 楼主| 发表于 2020-7-14 16:46:16 | 只看该作者
liuzhaoyzz 发表于 2020-7-14 16:10
%PROCESSOR_ARCHITECTURE%这个变量误导了很多人,其实这个变量返回值指的是当前命令解释器调用的是c:\windo ...

感谢大师,让我明白了“知其然并知其所以然”,
我的疑问得到了超级版主的解惑,有点让我受宠若惊啊
回复

使用道具 举报

7#
 楼主| 发表于 2020-7-14 16:56:16 | 只看该作者
18588452015 发表于 2020-7-14 16:18
谢谢了先,我试试看。

感谢大师了,按照你说的方法 用64位的PECMD就能够正常读取系统地方位数了,
相当的感谢,大帮助解决了困扰我很久的问题了。
回复

使用道具 举报

8#
 楼主| 发表于 2020-7-14 16:59:05 | 只看该作者
红毛樱木 发表于 2020-7-14 16:33
FIND $%PROCESSOR_ARCHITECTURE%=AMD64,MESS 是64位系统@提示: #OK!MESS 是32位(X86)系统@提示: #OK

感谢红毛大师了,
你这方法我试过,一样不行的,问题就是我在64位系统中用的32位的pecmd程序了,所以读取的变量不是AMD64。

点评

IFEX $%&bX64%=0,MESS 是32位(X86)系统@提示: #OK! MESS 是64位系统@提示: #OK  详情 回复 发表于 2020-7-14 18:19
回复

使用道具 举报

9#
发表于 2020-7-14 18:19:45 | 只看该作者
18588452015 发表于 2020-7-14 16:59
感谢红毛大师了,
你这方法我试过,一样不行的,问题就是我在64位系统中用的32位的pecmd程序了,所以读 ...

IFEX $%&bX64%=0,MESS 是32位(X86)系统@提示: #OK! MESS 是64位系统@提示: #OK
回复

使用道具 举报

10#
发表于 2020-7-16 21:32:04 | 只看该作者
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=403644&extra=

看我的帖子,通过2个变量综合判断,
存在变量 programw6432 说明是64位系统,通过 %PROCESSOR_ARCHITECTURE% 变量判断程序是32还是64

回复

使用道具 举报

11#
发表于 2020-7-17 08:40:18 | 只看该作者
IF /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" GOTO :X64
IF /I "%PROCESSOR_ARCHITECTURE%"=="X86" GOTO :X86

这个呢?

点评

我想用INI配置文件来实现,最好不要调用批处理哦, 还是谢谢你的热心帮助,哈哈  详情 回复 发表于 2020-7-20 16:16
回复

使用道具 举报

12#
 楼主| 发表于 2020-7-20 16:16:28 | 只看该作者
ge 发表于 2020-7-17 08:40
IF /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" GOTO :X64
IF /I "%PROCESSOR_ARCHITECTURE%"=="X86" GOTO :X ...

我想用INI配置文件来实现,最好不要调用批处理哦,
还是谢谢你的热心帮助,哈哈
回复

使用道具 举报

13#
发表于 2020-7-23 14:17:25 | 只看该作者
FIND $0=%&bX64%,
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-24 14:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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