Как определить, является ли текущая версия Windows 32-битной или 64-битной из командной строки? [Дубликат]


26

Какова командная строка, чтобы узнать, работает ли ОС 32-разрядная версия или 64-разрядная версия Windows?


На каком языке ?!
Аликс Аксель

@AlixAxel, хорошо, они сказали командную строку , так что, по-видимому, если что, Batch.
Synetech

Ответы:


33

Вы можете получить это через WMI:

wmic OS get OSArchitecture

Пример в моей системе:

C:\>wmic OS get OSArchitecture
OSArchitecture
32-bit

Мне нравится этот ответ (нужно научить меня некоторой консоли WMI :)), но я должен дать его "systeminfo" для нажатия клавиш. ;)
Ƭᴇcʜιᴇ007

XP?
Synetech

18

Командная строка:

systeminfo | findstr /I type:

пример вывода:

Тип системы: ПК на базе X86

X86 обозначает 32-битную систему в этом примере.

( /I параметр указывает поиск без учета регистра )


Я дал вам точку для нажатия клавиш, а затем вы сделали это дольше. хе-хе :)
Ƭᴇcʜιᴇ007

Это не мой ответ: P
Джон Т

2
Но «ПК на базе X86» - это то же самое, что и 32-битная ОСАрхитектура? Вы можете запустить 32-битную Win XP на процессоре x64.
Майкл Кэрон,

будьте осторожны, если ваш язык ОС немецкий (или, может быть, любой другой, кроме английского)! Я должен изменить, systeminfo | findstr /I typ:поскольку вся записьSystemtyp: x64-based PC
CeOnSql

systeminfo | findstr /C:"System Type"также получает ту же информацию, но я думаю, более длинный текст, поэтому менее предпочтительным.
Abhijeet

13

Я не могу прикрепить ответ к другому посту, поэтому здесь. Конвейер результата systeminfo- занимает довольно много времени и записывает в консоль, так что это не лучшее решение для командных файлов (пакетные сценарии - во всяком случае, вы любите называть их B-)).

Даже с findstr- он не находит это на другой языковой версии Windows. На среднеевропейском языке win7 os он также возвращает ... "на основе X86" ... на результат, но что-то другое, что искали "тип". Я не уверен, что это может отличаться от других языковых вариантов ОС.

Вероятно, «wmic» метод является наиболее надежным - он запрашивает ОС напрямую.

Другим возможным быстрым решением может быть проверка переменной (по крайней мере, работа на win7 у меня).

echo %PROCESSOR_ARCHITECTURE%

Хорошо - это довольно долго, чтобы вспомнить, но возможно, что set | findstr ARCHможно запомнить.

Конечно, некоторые могут изменить системную переменную, поэтому не настолько надежны, как wmic. Но можно использовать быстро.

Я надеюсь, что смогу помочь кому-нибудь.


Я не был уверен, что команда echo будет работать на моем компьютере с XP, потому что я никогда раньше не видел эту переменную среды (возможно, потому что я никогда ее не искал), но она работает. +1 за простое решение.
music2myear

11

Существует множество способов проверить архитектуру процессора под Windows:

  • Самый быстрый, простой и совместимый способ проверить архитектуру процессора как минимум в Windows 2000 и выше - это проверить PROCESSOR_ARCHITECTURE переменную среды :

    echo %PROCESSOR_ARCHITECTURE%

  • Однако это может дать разные результаты, в зависимости от способа открытия командной строки. Чтобы избежать «неожиданных результатов» из-за WoW64 , вы можете прочитать его непосредственно из реестра (Microsoft сделала не менее двух опечаток в ключе ):

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

  • Microsoft также предлагает прочитать информацию об оборудовании из реестра:

    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-битных и 64-битных системах Intel (пожалуйста, протестируйте на 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.

5

Я не мог найти OSArchitectureсобственность (согласно ответу Феба), поэтому я предложил бы использовать SystemTypeсобственность ComputerSystemвместо этого.

Запуск команды wmic computersystem get systemtypeиз командной строки дает

C:\Windows\system32>wmic computersystem get systemtype  

SystemType x64-based PC

4

Обычная командная строка: wmic OS get OSArchitecture (IIRC)

PowerShell: (gwmi win32_computersystem).SystemType


1
Я получаю Invalid Queryв XP.
Synetech

1

если вы имеете в виду ОС Windows, вы можете использовать VBScript с WMI

strComputer = "."    
Set objWMIService = GetObject("winmgmts{impersonationLevel=impersonate,authenticationLevel=Pkt}!\\" & strComputer & "\root\cimv2")    
Set colSettings = objWMIService.ExecQuery("SELECT * FROM Win32_Processor")

For Each objProcessor In colSettings
Wscript.Echo "System Type: " & objProcessor.Architecture
Wscript.Echo "Processor: " & objProcessor.Description
Wscript.Echo "Address Width: "& objProcessor.AddressWidth
Next

1

Вы можете найти эту информацию, используя «Системную информацию»

Пуск-> Выполнить -> winmsd.exe

В разделе «Сводка системы» / «Тип системы» вы можете найти версию ОС.

X64 -> 64-битная
X86 -> 32-битная

Ответ JohnT в GUI;)


1

Зайдите в Пуск »Выполнить, а затем введите cmd. Теперь вы будете в командной строке. Там вы можете ввести, systeminfoа затем нажать клавишу ввода. Требуется несколько секунд, чтобы получить всю информацию о вашей системе. Вы можете найти данные процессора тоже.

 Processor(s):              1 Processor(s) Installed.
                           [01]: x86 Family 15 Model 4 Stepping 10 GenuineIntel
  • Семейство x86 означает, что ваш процессор 32-разрядный.
  • Семейство x64 означает, что ваш процессор 64-битный.

C: \ Documents and Settings \ mr85464> systeminfo

OS Name:                   Microsoft Windows XP Professional
OS Version:                5.1.2600 Service Pack 3 Build 2600
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Workstation
OS Build Type:             Multiprocessor Free
Product ID:                76487-640-3658033-23932
Original Install Date:     3/16/2012, 2:03:44 PM
System Up Time:            5 Days, 21 Hours, 35 Minutes, 51 Seconds
System Manufacturer:       Dell Inc.
System Model:              OptiPlex 210L
System type:               X86-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: x86 Family 15 Model 4 Stepping 10 GenuineIntel
~2992 Mhz

2
Действительно занимает несколько секунд! И запустить его снова не поможет, потому что он не кеширует информацию. Кроме того, обновления Windows заставляют часть об архитектуре быстро прокручиваться за пределы экрана, поэтому, если у вас нет достаточно большого буфера, вам нужно направить его в канал more.
Synetech

0

Простой код, который я использовал:

:arch
set p | findstr /i AMD64 > nul
if not errorlevel 1 goto no64
goto eof
:no64
code to execute
:eof
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.