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


Answers:


12

一种更快的方法是检查%ProgramFiles(x86)%目录的存在。如果存在,则您正在运行64位,如果不存在,则您正在运行32位。

快速一线:

if exist "%ProgramFiles(x86)%" echo 64-bit

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

您还可以使用查找工具来确定比特数的更准确方法。

set | find "ProgramFiles(x86)"

systeminfo以前使用命令

systeminfo | find /I "System type"

(包括/I可在XP / 2003/2008 / etc中使用的)


应该是systeminfo | find "System type" 国会大厦T没有任何回报。
内森·德威特2009年

是的,完全错过了。谢谢内森!当然,您也可以使用/ I开关使其也不区分大小写。
约书亚

Server 2008,它实际上是一个大写的“ T”。无论哪种方式。感谢您的回答-完美。
浪漫

精细!我继续将/ I切换到systeminfo,以便无论它是否为大写字母t都可以找到它!:)
约书亚记

22

怎么样:

echo %PROCESSOR_ARCHITECTURE%

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


2
为何有0票?OO(+1)
阿帕奇

1
与检查其他人发布的目录是否存在相比,这是一个更好的解决方案Program Files (x86)。您还可以检查%PROGRAMFILES(X86)%环境变量是否存在(如果存在,则说明您使用的是x86计算机)。
突破

3
>为什么这有0票? 也许是因为它 可靠
Synetech 2012年

2
这个答案有问题!- stackoverflow.com/questions/1738985/...
T.Todua

9
systeminfo 

它将列出很多,下面大约有10个字段称为“系统类型”。这将告诉您它是x86还是x64


8
systeminfo | find /I "System type"

这取决于语言环境,并且比较

echo %PROCESSOR_ARCHITECTURE%

注意,它是32位的x86cmd.exe

正确方法:

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 

完全同意您对使用“ systeminfo”的想法。感谢您的建议,我用在我的剧本之一
abstrask

最好的答案!带有附加的验证器PROCESSOR_ARCHITEW6432
T.Todua 2014年


5

有很多方法可以检查Windows下的处理器体系结构:

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

    echo %PROCESSOR_ARCHITECTURE%

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

    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.

3

一般解决方案

我确实必须对此进行深入研究,并在WMI中进行了全面了解。

我认为最好的选择是仅使用此PowerShell字符串

(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType

甚至适用于旧的Windows 2003和XP

答案将是以下之一

  • 基于X86的PC
  • 基于x64的PC

基于x64的PC

或者如果恢复到某些老式的cmd工具

wmic computersystem get systemtype

2

尽管这不是理想的答案,并且systeminfo.exe应该是确定系统类型(例如32位或64位)的首选方法,但是如果您不想等待systeminfo.exe完成其工作,则该解决方案的运行速度会更快一些。

命令:

reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"

通过对注册表查询和搜索字符串的正确更改,您还可以检查Windows 95之前的操作系统版本。systeminfo.exe更精确,更正确的查询方式,reg.exe query更快,更向后兼容。


感谢Tom所做的编辑,您删除了答案的重要信息,然后继续实际引入了一个错误。
贾斯汀

1
您可以让REG.EXE使用/ v开关拉出确切的值,而不是通过Microsoft的越野车“ find”命令来传递输出,而不是通过/ v开关拉出确切的值: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga'1

0

更好的解决方案:

方法1:(
使用PROCESSOR_ARCHITECTURE和进行两步验证PROCESSOR_ARCHITEW6432

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 


if %Arch% == "x64"  (
    msg * "yessss"
) else  (
    msg * "noooo"
)

方法2:

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo "YESSS"
if %OS%==64BIT echo "NOOO"

来源:https : //superuser.com/a/293143/249349


-1

使用WMI界面,在命令提示符下。以管理员身份打开命令提示符,然后键入wmic OS get OSArchitecture并按Enter

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.