Mendeteksi Windows Server versi 32/64-bit di CLI


Jawaban:


12

Cara yang sedikit lebih cepat adalah memeriksa keberadaan direktori% ProgramFiles (x86)%. Jika ada maka Anda menjalankan 64-bit, jika tidak ada maka Anda menjalankan 32-bit.

Satu liner cepat:

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

Itu akan menampilkan 64-bitjika direktori ada. Itu akan gagal, meskipun, jika itu tidak ada sebagai variabel tetapi itu memang ada sebagai direktori (sebagai% ProgramFiles (x86)%).

Anda juga dapat menggunakan alat temukan untuk memiliki cara yang lebih akurat untuk menentukan bitness.

set | find "ProgramFiles(x86)"

atau menggunakan systeminfoperintah sebelumnya

systeminfo | find /I "System type"

(termasuk /Iuntuk bekerja di XP / 2003/2008 / dll)


seharusnya systeminfo | find "System type" Capitol T tidak mengembalikan apa pun.
Nathan DeWitt

Yup, sangat merindukan itu. Nathan terima kasih! Tentu saja, Anda juga bisa menggunakan / I switch untuk membuatnya case-sensitive juga.
Joshua

Server 2008, sebenarnya adalah modal 'T'. Either way. Terima kasih atas jawabannya - sempurna.
romant

Baik! Saya pergi ke depan dan memasukkan / saya beralih ke systeminfo sehingga akan menemukannya apakah itu modal t atau tidak! :)
Joshua

22

Bagaimana tentang:

echo %PROCESSOR_ARCHITECTURE%

Ini akan mengembalikan x86 pada sistem 32-bit dan AMD64 (atau IA64 ) pada sistem 64-bit.


2
Kenapa ini memiliki 0 suara? oO (+1)
Apache

1
Ini adalah solusi yang jauh lebih baik daripada memeriksa keberadaan Program Files (x86)direktori sebagai orang lain yang diposting. Anda juga dapat memeriksa keberadaan %PROGRAMFILES(X86)%variabel lingkungan (jika tidak ada, maka Anda menggunakan mesin x86).
Terobosan pada

3
> Kenapa ini memiliki 0 suara? Mungkin karena itu tidak dapat diandalkan .
Synetech

2
JAWABAN INI MEMILIKI MASALAH !! - stackoverflow.com/questions/1738985/…
T.Todua

9
systeminfo 

Ini akan mencantumkan sedikit, sekitar 10 bidang di bawah ada satu yang disebut Tipe Sistem. Ini akan memberi tahu Anda apakah itu x86 atau x64


8
systeminfo | find /I "System type"

Ini tergantung lokal, dan lambat .

echo %PROCESSOR_ARCHITECTURE%

Perhatikan, itu x86 dalam 32-bit cmd.exe.

Jalan yang benar:

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

Sepenuhnya setuju pada pemikiran Anda tentang penggunaan 'systeminfo'. Terima kasih atas saran Anda, saya telah menggunakannya di salah satu skrip saya
abstrask

JAWABAN Terbaik! dengan validator tambahanPROCESSOR_ARCHITEW6432
T.Todua


5

Ada banyak cara untuk memeriksa arsitektur prosesor di Windows:

  • Cara tercepat, termudah, dan paling kompatibel untuk memeriksa arsitektur prosesor di setidaknya Windows 2000 dan yang lebih tinggi adalah dengan memeriksa PROCESSOR_ARCHITECTURE variabel lingkungan :

    echo %PROCESSOR_ARCHITECTURE%

  • Namun, ini dapat memberikan hasil yang berbeda, tergantung pada cara di mana command-prompt dibuka. Untuk menghindari "hasil yang tidak terduga" karena WoW64 , Anda dapat membacanya langsung dari registri (Microsoft membuat tidak kurang dari dua kesalahan ketik di kunci ):

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

  • Microsoft juga menyarankan untuk membaca penyimpanan informasi perangkat keras dari registri:

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

  • Anda juga dapat memeriksa keberadaan versi Program Filesdirektori x86 (atau variabel lingkungan yang menunjukkannya) karena hanya akan ada pada sistem 64-bit. Berbeda dengan PROCESSOR_ARCHITECTUREvariabel, ini tidak tergantung pada cara command prompt dijalankan karena direktori ada (atau tidak) terlepas dari bagaimana prompt dibuka:

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

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

Metode-metode ini dapat digabungkan dalam satu file batch (misalnya, cpuinfo.bat) dan menyediakan cara cepat dan bagus untuk memeriksa sistem dari command-prompt standar Windows NT tanpa perlu menggunakan program atau kerangka kerja lain.

Ini diuji pada sistem 32-bit dan Intel 64-bit (silakan uji pada AMD64), memberikan hasil yang benar dalam <1 detik:

@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

SOLUSI UMUM

Saya benar-benar harus menggali ini dan melihat-lihat di WMI.

Pilihan terbaik menurut saya adalah cukup menggunakan string PowerShell ini

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

Ini bahkan bekerja dengan Windows 2003 dan XP lama

Jawabannya adalah salah satunya

  • PC berbasis X86
  • PC berbasis x64

PC berbasis x64

Atau jika kembali ke beberapa alat cmd kuno

wmic computersystem get systemtype

2

Meskipun ini bukan jawaban yang ideal, dan systeminfo.exeharus menjadi metode pilihan Anda untuk menentukan jenis sistem, yaitu 32-bit atau 64-bit, solusi ini berjalan sedikit lebih cepat jika Anda tidak ingin menunggu untuk systeminfo.exemenyelesaikan pekerjaannya.

Perintah:

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

Dengan perubahan yang benar pada kueri registri dan string pencarian Anda juga dapat memeriksa versi sistem operasi sejauh Windows 95. systeminfo.exelebih tepat dan cara kueri yang benar, reg.exe querylebih cepat dan lebih kompatibel ke belakang.


Terima kasih Tom untuk pengeditannya, Anda menghapus informasi penting untuk jawabannya, dan kemudian benar-benar memperkenalkan bug.
Justin

1
Daripada mem-pipkan output melalui perintah "find" buggy dari Microsoft, Anda bisa meminta REG.EXE menarik nilai yang tepat dengan tombol / v: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga

0

SOLUSI yang lebih baik:

Metode 1:
(Validasi dua langkah dengan PROCESSOR_ARCHITECTUREdan 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"
)

Metode 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"

sumber: /superuser//a/293143/249349


-1

Menggunakan antarmuka WMI, di bawah Command Prompt. Buka Command Prompt sebagai Administrator, dan ketik wmic OS get OSArchitecturedan tekanEnter

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.