CLI'da Windows Server sürüm 32/64-bit'i algılama


Yanıtlar:


12

% ProgramFiles (x86)% dizininin varlığını kontrol etmek biraz daha hızlı bir yol olabilir. Varsa 64 bit, yoksa 32 bit çalıştırıyorsunuz demektir.

Hızlı bir astar:

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

64-bitDizin varsa , çıktı alınacaktır . Ancak değişken olarak olmasa da bir dizin olarak (% ProgramFiles (x86)% olarak) mevcut olsaydı bu başarısız olur.

Bulmayı, bitliği belirlemek için daha doğru bir yol bulmak için de kullanabilirsiniz.

set | find "ProgramFiles(x86)"

veya systeminfodaha önce komutu kullanarak

systeminfo | find /I "System type"

( /IXP / 2003/2008 / vs'de çalışmak için dahil )


Olması gereken systeminfo | find "System type" Capitol T döner bir şey.
Nathan DeWitt

Evet, tamamen özledim. Teşekkürler Nathan! Tabii ki, / I anahtarını da büyük / küçük harfe duyarsız hale getirmek için kullanabilirsiniz.
Joshua

Server 2008, aslında büyük bir 'T'. Öyle ya da böyle. Cevabınız için teşekkürler - mükemmel.
romant

İnce! Devam ettim ve / I systeminfo'ya geçtim, böylece sermaye olsun ya da olmasın onu bulacaksın! :)
Joshua

22

Nasıl olur:

echo %PROCESSOR_ARCHITECTURE%

Bu , 32 bit sistemlerde x86 ve 64 bit sistemlerde AMD64 (veya IA64 ) döndürür .


2
Bunun nasıl 0 oyu vardı? oO (+1)
Apache

1
Bu, daha sonra Program Files (x86)başka birinin yayınladığı dizinin varlığını kontrol etmekten çok daha iyi bir çözümdür . Ortam değişkeninin varlığını da kontrol edebilirsiniz %PROGRAMFILES(X86)%(eğer mevcut değilse , bir x86 makinesindesiniz).
Atılım

3
> Bunun nasıl 0 oyu vardı? Belki de güvenilir olmadığı için .
Haziran'da Synetech

2
BU CEVAP SORUNLARI VAR !! - stackoverflow.com/questions/1738985/…
T.Todua

9
systeminfo 

Biraz listeleyecek, aşağıda yaklaşık 10 alan Sistem Türü adı verilen bir alan var. Bu size x86 veya x64 olup olmadığını söyleyecektir


8
systeminfo | find /I "System type"

Bu, yerel ayara bağlı ve yavaştır .

echo %PROCESSOR_ARCHITECTURE%

32- bit'te x86 olduğuna dikkat edin cmd.exe.

Doğru yol:

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

'Systeminfo' kullanma hakkındaki düşüncelerinizi tamamen kabul edin. Öneriniz için teşekkürler, bunu
senaryomlardan

En İyi CEVAP! ek doğrulayıcı ilePROCESSOR_ARCHITEW6432
T.Todua


5

Windows altında işlemci mimarisini kontrol etmenin birçok yolu vardır:

  • En az Windows 2000 ve sonraki sürümlerde işlemci mimarisini kontrol etmenin en hızlı, en kolay ve en uyumlu yolu PROCESSOR_ARCHITECTURE ortam değişkenini incelemektir :

    echo %PROCESSOR_ARCHITECTURE%

  • Ancak, bu komut isteminin açılma şekline bağlı olarak farklı sonuçlar verebilir. Almamak için sebebiyle WoW64 için “beklenmedik sonuçlar” , (Microsoft daha az yapılan doğrudan kayıt defterinden okuyabilirsiniz anahtarında iki yazım hatası ):

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

  • Microsoft ayrıca donanım bilgi deposunun kayıt defterinden okunmasını önerir:

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

  • Ayrıca , yalnızca 64 bit sistemde bulunacağı için Program Filesdizinin x86 sürümünün (veya bunu işaret eden ortam değişkeninin) olup olmadığını da denetleyebilirsiniz. PROCESSOR_ARCHITECTUREDeğişkenin aksine , bu komut isteminin nasıl açıldığına bakılmaksızın dizin var olduğundan (veya olmadığından) komut isteminin çalışma şekline bağlı değildir:

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

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

Bu yöntemler tek bir toplu iş dosyasında (örn. cpuinfo.bat) Birleştirilebilir ve diğer programların veya çerçevelerin çalıştırılmasına başvurmanıza gerek kalmadan sistemi standart bir Windows NT komut isteminden kontrol etmek için güzel, yıldırım hızında bir yol sağlar.

Bu, 32 bit ve Intel 64 bit sistemlerde test edildi (lütfen AMD64 üzerinde test edin), <1 saniye içinde doğru sonuçlar verir:

@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

GENEL ÇÖZÜM

Bunu gerçekten araştırmak ve WMI'da gerçek bir göz atmak zorundaydım.

Bence en iyi seçenek bu PowerShell dizesini kullanmak

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

Bu, eski Windows 2003 ve XP ile bile çalışır

Cevap şunlardan biri olacak

  • X86 tabanlı PC
  • x64 tabanlı PC

x64 tabanlı PC

Ya da bazı eski moda cmd araçlarına dönüyorsanız

wmic computersystem get systemtype

2

Bu ideal bir yanıt olmasa da systeminfo.exeve sistem türünü, yani 32 bit veya 64 bit'i belirlemede tercih ettiğiniz yöntem olsa da systeminfo.exe, işini bitirmek için beklemek istemiyorsanız, bu çözüm biraz daha hızlı çalışır.

Komuta:

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

Ayrıca kadar geriye Windows 95 gibi sistem sürümlerini işletim kontrol edebilirsiniz dize kayıt sorguya doğru değişikliklerle ve arama systeminfo.exedaha kesin ve sorgulama doğru yoldur, reg.exe querydaha hızlı ve daha geriye uyumludur.


Düzenlemeler için teşekkürler Tom, cevaba ilişkin önemli bilgileri kaldırdınız ve daha sonra gerçekten bir hata sunmaya devam ettiniz.
Justin

1
Çıktıyı Microsoft'un buggy "find" komutuyla iletmek yerine REG.EXE'nin / v anahtarıyla tam değeri çekmesini sağlayabilirsiniz:reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga

0

Daha İyi ÇÖZÜM:

Yöntem 1:
( PROCESSOR_ARCHITECTUREve ile iki aşamalı doğrulama 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"
)

Yöntem 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"

Kaynak: /superuser//a/293143/249349


-1

WMI arabirimini kullanarak Komut İstemi altında. Komut İstemi'ni Yönetici olarak açın ve yazın wmic OS get OSArchitectureve tuşuna basın.Enter

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.