Board logo

标题: [系统相关] 用%processor_architecture%来判断64位系统和32位系统是不准确的 [打印本页]

作者: szl1123    时间: 2014-7-7 21:06     标题: 用%processor_architecture%来判断64位系统和32位系统是不准确的

%processor_architecture%变量根本不能用来判断是32位系统还是64位系统。我不知道那个问题回答这个变量的是复制别人的还是经过自己测试过的。

以下是我的测试结果。

当%processor_architecture%变量在64位系统中在32位的CMD下显示的是x86,在64位CMD下显示的是???64,我还测试了BAT转换成EXE后显示的结果,由于转换后的EXE程序是32位的,所以%processor_architecture%变量的结果是x86。所以%processor_architecture%不能当作来判断32位系统还是64位系统的。
  1. rem 测试用%PROCESSOR_IDENTIFIER%结果并不能作为判断32位系统的64位系统的依据
  2. echo PROCESSOR_IDENTIFIER=%PROCESSOR_IDENTIFIER%
  3. echo PROCESSOR_ARCHITECTURE=%PROCESSOR_ARCHITECTURE%
  4. pause
复制代码
以下代码可以正确判断是32位系统和64位系统
xp、win7 32/64、win8.1 32/64测试通过。
  1. rem 判断64位系统和32位系统
  2. if /i %PROCESSOR_IDENTIFIER:~0,3%==x86 (
  3. echo 32位操作系统
  4. ) else (
  5. echo 64位操作系统
  6. )
  7. pause
复制代码

作者: Batcher    时间: 2014-7-7 23:13

我的电脑上得到的结果是这样的:

C:\>echo %PROCESSOR_IDENTIFIER:~0,3%
Int

C:\>echo %PROCESSOR_IDENTIFIER%
Intel64 Family 6 Model 42 Stepping 7, GenuineIntel

不知道其它处理器会是什么结果
作者: Batcher    时间: 2014-7-8 09:04

  1. if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" (
  2.     echo 32
  3. ) else (
  4.     echo 64
  5. )
复制代码
可以试试这个效果如何
作者: szl1123    时间: 2014-7-8 16:37

我的电脑上得到的结果是这样的:

C:\>echo %PROCESSOR_IDENTIFIER:~0,3%
Int

C:\>echo %PROCESSOR_I ...
Batcher 发表于 2014-7-7 23:13



    echo %PROCESSOR_IDENTIFIER:~0,3%
这句只判断了是否等于"x86"如果非"x86"就认为是64位的,我想这样应该是可以的,至少 目前我测试的这几个系统 都是可以的
作者: Batcher    时间: 2014-7-8 17:12

回复 4# szl1123


    3楼的那种方法在你的几个系统里面会不会误判?
作者: terse    时间: 2014-7-8 18:28

相比 变量  PROCESSOR_IDENTIFIER 的判断 变量 processor_architecture 的判断还是繁琐点
下面代码网友测试成功了 本人没测试系统 不发表意见
  1. @echo off
  2.   Set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "xOS=x32"
  3.   echo %xOS%
  4. pause
复制代码

作者: szl1123    时间: 2014-7-8 20:47

回复 5# Batcher


    xp、win7 32/64、win8 32/64测试通过。

%PROCESSOR_ARCHITEW6432%此变量只出现在64位系统中32位的CMD中有显示,64位CMD中没有显示这个变量,32位系统中也没有显示这个变量。
作者: szl1123    时间: 2014-7-8 20:52

相比 变量  PROCESSOR_IDENTIFIER 的判断 变量 processor_architecture 的判断还是繁琐点
下面代码网友测试 ...
terse 发表于 2014-7-8 18:28



     可用
作者: Chinavy    时间: 2021-10-6 11:47

那要是64位的CPU,安装的是32位的系统,怎么办,岂不判断错误了?
作者: a20150604    时间: 2021-10-6 12:32

本帖最后由 a20150604 于 2021-10-6 12:39 编辑

ProgramFiles(x86) 在32位系统上是否有定义, 如果没有, 只用检测此变量就行了
  1. if defined ProgramFiles(x86) (echo;64) else echo;32
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2