在 CLI 中检测 Windows Server 版本 32/64 位

rom*_*ant 18 windows 64-bit windows-server-2008 windows-server-2003 32-bit

从命令行检测您运行的是 32 位还是 64 位版本的 Windows Server 的最佳和最快方法是什么?

(Cygwin 已安装)

Gaf*_*aff 22

怎么样:

echo %PROCESSOR_ARCHITECTURE%
Run Code Online (Sandbox Code Playgroud)

这将在 32 位系统上返回x86,在 64 位系统上返回AMD64(或IA64)。

  • *> 为什么这有 0 票?* 也许是因为它 [不是](http://stackoverflow.com/questions/601089/detect-whether-current-windows-version-is-32-bit-or-64-位)[可靠](http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx)。 (3认同)
  • 这个答案有问题!!- http://stackoverflow.com/questions/1738985/why-processor-architecture-always-returns-x86-instead-of-amd64 (3认同)
  • 这怎么有0票?oO (+1) (2认同)

Jos*_*hua 13

稍微快一点的方法是检查 %ProgramFiles(x86)% 目录是否存在。如果它存在,那么您正在运行 64 位,如果它不存在,那么您正在运行 32 位。

快速单线:

if exist "%ProgramFiles(x86)%" echo 64-bit
Run Code Online (Sandbox Code Playgroud)

64-bit如果目录存在,这将输出。但是,如果它不作为变量存在但确实作为目录存在(如 %ProgramFiles(x86)%),那将会失败。

您还可以使用查找工具来更准确地确定位数。

set | find "ProgramFiles(x86)"
Run Code Online (Sandbox Code Playgroud)

或使用systeminfo之前的命令

systeminfo | find /I "System type"
Run Code Online (Sandbox Code Playgroud)

(包括/I跨 XP/2003/2008/etc 工作)


MDM*_*rra 9

systeminfo 
Run Code Online (Sandbox Code Playgroud)

它会列出很多,大约有 10 个字段,其中一个称为系统类型。这会告诉你它是 x86 还是 x64


小智 8

systeminfo | find /I "System type"
Run Code Online (Sandbox Code Playgroud)

这取决于语言环境,而且速度很慢

echo %PROCESSOR_ARCHITECTURE%
Run Code Online (Sandbox Code Playgroud)

请注意,它是32 位的x86cmd.exe

正确做法:

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 
Run Code Online (Sandbox Code Playgroud)


小智 6

使用 WMI 查询进行检查的其他方法:

电源外壳:

(gwmi win32_computersystem).SystemType
Run Code Online (Sandbox Code Playgroud)

指令:

wmic OS get OSArchitecture 
Run Code Online (Sandbox Code Playgroud)

摘自这里:http : //www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html


Syn*_*ech 5

在 Windows 下有多种检查处理器架构的方法:

  • 在至少 Windows 2000及更高版本中检查处理器体系结构的最快、最简单和最兼容的方法是检查PROCESSOR_ARCHITECTURE 环境变量

    echo %PROCESSOR_ARCHITECTURE%

  • 但是,这可能会产生不同的结果,具体取决于命令提示符的打开方式。为避免由于 WoW64获得“意外结果”,您可以直接从注册表中读取它(微软在密钥中输入了不少于两个拼写错误):

    reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

  • 微软还建议从注册表中读取硬件信息存储:

    reg query "HKLM\Hardware\Description\System\CentralProcessor\0" /v Identifier

  • 您还可以检查Program Files目录的 x86 版本(或指向它的环境变量)是否存在,因为它只存在于 64 位系统上。与PROCESSOR_ARCHITECTURE变量不同,这不依赖于命令提示符的运行方式,因为目录存在(或不存在)而不管提示符如何打开:

    • ::via env-var
      if not defined ProgramFiles(x86) echo 32-bit

    • ::via file-system
      if not exist "%systemdrive%\Program Files (x86)" echo 32-bit

这些方法可以组合在一个单独的批处理文件(例如,cpuinfo.bat)中,并提供了一种很好的、​​闪电般快速的方式来从标准的 Windows NT 命令提示符检查系统,而无需求助于运行其他程序或框架。

这是在 32 位和 Intel 64 位系统上测试的(请在 AMD64 上测试),在 <1 秒内给出正确的结果:

@echo off

echo PROCESSOR_ARCHITECTURE var:
echo %PROCESSOR_ARCHITECTURE% | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo PROCESSOR_ARCHITECTURE reg:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo CentralProcessor reg:
reg query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo ProgramFiles(x86) var:
if not defined ProgramFiles(x86) (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo ProgramFiles(x86) dir:
if not exist "%systemdrive%\Program Files (x86)" (
    echo   32-bit
) else (
    echo   64-bit
)
echo.
Run Code Online (Sandbox Code Playgroud)