Phát hiện Windows Server phiên bản 32/64-bit trong CLI


Câu trả lời:


12

Một cách nhanh hơn một chút sẽ là kiểm tra sự tồn tại của thư mục% ProgramFiles (x86)%. Nếu nó tồn tại thì bạn đang chạy 64 bit, nếu nó không tồn tại thì bạn đang chạy 32 bit.

Nhanh một lớp lót:

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

Điều đó sẽ xuất 64-bit nếu thư mục tồn tại. Tuy nhiên, điều đó sẽ thất bại nếu nó không tồn tại dưới dạng một biến nhưng nó đã tồn tại dưới dạng một thư mục (dưới dạng% ProgramFiles (x86)%).

Bạn cũng có thể sử dụng công cụ tìm kiếm để có cách xác định bitness chính xác hơn.

set | find "ProgramFiles(x86)"

hoặc sử dụng systeminfolệnh trước đó

systeminfo | find /I "System type"

(bao gồm /Iđể hoạt động trên XP / 2003/2008 / etc)


nó sẽ không được systeminfo | find "System type" trả về
Nathan DeWitt

Yup, hoàn toàn bỏ lỡ điều đó. Cảm ơn Nathan! Tất nhiên, bạn cũng có thể sử dụng công tắc / I để làm cho trường hợp không nhạy cảm nữa.
Joshua

Máy chủ 2008, thực sự là một thủ đô 'T'. Dù bằng cách nào. Cảm ơn câu trả lời - hoàn hảo.
lãng mạn

Khỏe! Tôi đã tiếp tục và bao gồm / Tôi chuyển sang systeminfo để nó sẽ tìm thấy dù đó là vốn t hay không! :)
Joshua

22

Làm thế nào về:

echo %PROCESSOR_ARCHITECTURE%

Điều này sẽ trả về x86 trên các hệ thống 32 bit và AMD64 (hoặc IA64 ) trên các hệ thống 64 bit.


2
Làm thế nào điều này có 0 phiếu? oO (+1)
Apache

1
Đây là một giải pháp tốt hơn nhiều sau đó kiểm tra sự tồn tại của Program Files (x86)thư mục như người khác đã đăng. Bạn cũng có thể kiểm tra sự tồn tại của %PROGRAMFILES(X86)%biến môi trường (nếu nó không tồn tại, thì bạn đang sử dụng máy x86).
Đột phá

3
> Làm thế nào mà điều này có 0 phiếu? Có lẽ bởi vì nó không đáng tin cậy .
Synetech

2
CÂU TRẢ LỜI NÀY CÓ VẤN ĐỀ !! - stackoverflow.com/questions/1738985/
Mạnh

9
systeminfo 

Nó sẽ liệt kê khá nhiều, khoảng 10 trường dưới đó có một loại được gọi là Kiểu hệ thống. Điều này sẽ cho bạn biết nếu đó là x86 hoặc x64


8
systeminfo | find /I "System type"

Đây là phụ thuộc địa phương, và chậm .

echo %PROCESSOR_ARCHITECTURE%

Lưu ý rằng đó là x86 trong 32 bitcmd.exe .

Cách chính xác:

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

Hoàn toàn đồng ý với suy nghĩ của bạn về việc sử dụng 'systeminfo'. Cảm ơn đề xuất của bạn, tôi đã sử dụng nó trong một trong các kịch bản của mình
tóm tắt

TRẢ LỜI tốt nhất! với trình xác nhận bổ sungPROCESSOR_ARCHITEW6432
T.Todua


5

Có nhiều cách để kiểm tra kiến ​​trúc bộ xử lý trong Windows:

  • Cách nhanh nhất, dễ nhất và tương thích nhất để kiểm tra kiến ​​trúc bộ xử lý trong ít nhất Windows 2000 trở lên là kiểm tra PROCESSOR_ARCHITECTURE biến môi trường :

    echo %PROCESSOR_ARCHITECTURE%

  • Tuy nhiên, điều này có thể cho các kết quả khác nhau, tùy thuộc vào cách mở dấu nhắc lệnh. Để tránh nhận được kết quả không mong đợi, do ứng dụng WoW64 , bạn có thể đọc trực tiếp từ sổ đăng ký (Microsoft đã thực hiện không dưới hai lỗi chính tả trong khóa ):

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

  • Microsoft cũng đề nghị đọc kho thông tin phần cứng từ sổ đăng ký:

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

  • Bạn cũng có thể kiểm tra sự tồn tại của phiên bản x86 của Program Filesthư mục (hoặc biến môi trường trỏ đến nó) vì nó chỉ tồn tại trên hệ thống 64 bit. Không giống như PROCESSOR_ARCHITECTUREbiến, điều này không phụ thuộc vào cách mà dấu nhắc lệnh được chạy do thư mục tồn tại (hoặc không) bất kể cách mở dấu nhắc:

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

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

Các phương thức này có thể được kết hợp trong một tệp bó (ví dụ: cpuinfo.bat ) và cung cấp một cách nhanh chóng, nhanh chóng để kiểm tra hệ thống từ dấu nhắc lệnh Windows NT tiêu chuẩn mà không cần phải dùng đến các chương trình hoặc khung khác.

Điều này đã được thử nghiệm trên các hệ thống 32 bit và Intel 64 bit (vui lòng thử nghiệm trên AMD64), cho kết quả chính xác trong <1 giây:

@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

GIẢI PHÁP CHUNG

Tôi thực sự phải nghiên cứu sâu về vấn đề này và có cái nhìn thực tế xung quanh trong WMI.

Theo tôi, tùy chọn tốt nhất là chỉ cần sử dụng chuỗi PowerShell này

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

Điều này thậm chí hoạt động với Windows 2003 và XP cũ

Câu trả lời sẽ là một trong

  • PC dựa trên X86
  • PC dựa trên x64

PC dựa trên x64

Hoặc nếu quay lại một số công cụ cmd lỗi thời

wmic computersystem get systemtype

2

Mặc dù đây không phải là câu trả lời lý tưởng và systeminfo.exenên là phương pháp xác định loại hệ thống ưa thích của bạn, tức là 32 bit hoặc 64 bit, giải pháp này chạy nhanh hơn một chút nếu bạn không muốn chờ đợisysteminfo.exe hoàn thành công việc.

Lệnh:

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

Với các thay đổi chính xác cho truy vấn đăng ký và chuỗi tìm kiếm, bạn cũng có thể kiểm tra các phiên bản hệ điều hành từ Windows 95. systeminfo.exechính xác hơn và cách truy vấn chính xác, reg.exe querynhanh hơn và tương thích ngược hơn.


Cảm ơn Tom vì các chỉnh sửa, bạn đã xóa thông tin quan trọng cho câu trả lời và sau đó tiến hành thực sự giới thiệu một lỗi.
Justin

1
Thay vì dẫn đầu ra thông qua lệnh "find" của Microsoft, bạn có thể yêu cầu REG.EXE kéo giá trị chính xác bằng công tắc / v: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga

0

Giải pháp tốt hơn:

Phương pháp 1:
(Xác thực hai bước với PROCESSOR_ARCHITECTUREPROCESSOR_ARCHITEW6432)

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


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

Cách 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"

nguồn: /superuser//a/293143/249349


-1

Sử dụng giao diện WMI, dưới Dấu nhắc lệnh. Mở Dấu nhắc Lệnh với tư cách Quản trị viên, nhập wmic OS get OSArchitecturevà nhấn và nhấnEnter

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.