找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 65318|回复: 11

[系统相关] 用%processor_architecture%来判断64位系统和32位系统是不准确的

[复制链接]
发表于 2014-7-7 21:06: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
复制代码
发表于 2014-7-7 23:13:00 | 显示全部楼层
我的电脑上得到的结果是这样的:

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

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

不知道其它处理器会是什么结果
发表于 2014-7-8 09:04:58 | 显示全部楼层
  1. if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" (
  2.     echo 32
  3. ) else (
  4.     echo 64
  5. )
复制代码
可以试试这个效果如何
 楼主| 发表于 2014-7-8 16:37:57 | 显示全部楼层
我的电脑上得到的结果是这样的:

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位的,我想这样应该是可以的,至少 目前我测试的这几个系统 都是可以的
发表于 2014-7-8 17:12:36 | 显示全部楼层
回复 4# szl1123


    3楼的那种方法在你的几个系统里面会不会误判?
发表于 2014-7-8 18:28:33 | 显示全部楼层
相比 变量  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
复制代码
 楼主| 发表于 2014-7-8 20:47:35 | 显示全部楼层
回复 5# Batcher


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

%PROCESSOR_ARCHITEW6432%此变量只出现在64位系统中32位的CMD中有显示,64位CMD中没有显示这个变量,32位系统中也没有显示这个变量。
 楼主| 发表于 2014-7-8 20:52:53 | 显示全部楼层
相比 变量  PROCESSOR_IDENTIFIER 的判断 变量 processor_architecture 的判断还是繁琐点
下面代码网友测试 ...
terse 发表于 2014-7-8 18:28



     可用
发表于 2021-10-6 11:47:40 | 显示全部楼层
那要是64位的CPU,安装的是32位的系统,怎么办,岂不判断错误了?
发表于 2021-10-6 12:32:51 | 显示全部楼层
本帖最后由 a20150604 于 2021-10-6 12:39 编辑

ProgramFiles(x86) 在32位系统上是否有定义, 如果没有, 只用检测此变量就行了
  1. if defined ProgramFiles(x86) (echo;64) else echo;32
复制代码
发表于 2025-4-17 15:04:28 | 显示全部楼层
回复 10# a20150604


    我也是这么想的,不过谁知道arm版本的windows是什么样子吗?
发表于 2025-4-17 16:59:38 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-4-18 09:41 编辑


用 wmic 或 powershell 可准确获取当前os系统全称及其类型(32位/64位)...
bat+wmic 版本

  1. @echo off &for /f "delims=" %%a in ('wmic os get caption^,OSArchitecture^|find /i "windows" ') do echo,%%a
  2. pause&exit/b
复制代码
bat+powershell 版本

  1. @echo off &for /f "delims=" %%a in ('powershell "GWmi -class Win32_OperatingSystem|%%{$_.caption+' '+$_.OSArchitecture}" ') do echo,%%a
  2. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:25 , Processed in 0.020708 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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