ตรวจหา Windows Server รุ่น 32/64 บิตใน CLI


คำตอบ:


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 / ฯลฯ )


มันควรจะเป็นsysteminfo | find "System type" Capitol T ไม่ได้ทำอะไรเลย
Nathan DeWitt

ใช่พลาดอย่างสมบูรณ์ว่า ขอบคุณนาธาน! แน่นอนคุณสามารถใช้สวิตช์ / I เพื่อทำให้ตัวพิมพ์เล็กและพิมพ์เล็กได้เช่นกัน
Joshua

Server 2008 เป็นเมืองหลวงของ 'T' ทั้งสองทาง ขอบคุณสำหรับคำตอบ - สมบูรณ์แบบ
romant

ละเอียด! ฉันไปข้างหน้าและรวม / ฉันเปลี่ยนเป็น systeminfo เพื่อที่จะพบว่ามันเป็นตัวพิมพ์ใหญ่หรือไม่! :)
Joshua

22

เกี่ยวกับ:

echo %PROCESSOR_ARCHITECTURE%

สิ่งนี้จะส่งคืนx86ในระบบ 32 บิตและAMD64 (หรือIA64 ) บนระบบ 64 บิต


2
ทำไมมันถึงมี 0 โหวต? oO (+1)
Apache

1
นี่เป็นวิธีแก้ปัญหาที่ดีกว่ามากจากนั้นตรวจสอบการมีอยู่ของProgram Files (x86)ไดเรกทอรีขณะที่คนอื่นโพสต์ คุณอาจจะยังตรวจสอบสำหรับการดำรงอยู่ของ%PROGRAMFILES(X86)%ตัวแปรสภาพแวดล้อม (ถ้ามันไม่ได้อยู่แล้วคุณจะอยู่บนเครื่อง x86)
พัฒนา

3
> วิธีนี้มี 0 คะแนน อาจจะเป็นเพราะมันเป็นสิ่งที่ไม่ น่าเชื่อถือ
Synetech

2
คำตอบนี้มีปัญหา !! - stackoverflow.com/questions/1738985/…
T.Todua

9
systeminfo 

มันจะแสดงรายการค่อนข้างน้อยประมาณ 10 ช่องด้านล่างมีหนึ่งที่เรียกว่าประเภทระบบ นี่จะบอกคุณว่ามันคือ x86 หรือ x64


8
systeminfo | find /I "System type"

นี่ขึ้นอยู่กับสถานที่และ ช้า

echo %PROCESSOR_ARCHITECTURE%

สังเกตว่ามัน 86 xcmd.exe 32 บิต

วิธีที่ถูกต้อง:

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

เห็นด้วยอย่างยิ่งกับความคิดของคุณเกี่ยวกับการใช้ 'systeminfo' ขอบคุณสำหรับคำแนะนำของคุณฉันใช้มันในสคริปต์ตัวหนึ่งของฉัน
abstrask

คำตอบที่ดีที่สุด! กับตัวตรวจสอบเพิ่มเติมPROCESSOR_ARCHITEW6432
T.Todua


5

มีหลายวิธีในการตรวจสอบสถาปัตยกรรมโปรเซสเซอร์ภายใต้ Windows:

  • วิธีที่เร็วที่สุดง่ายที่สุดและเข้ากันได้ดีที่สุดในการตรวจสอบสถาปัตยกรรมโปรเซสเซอร์ในอย่างน้อย Windows 2000ขึ้นไปคือการตรวจสอบPROCESSOR_ARCHITECTURE ตัวแปรสภาพแวดล้อม :

    echo %PROCESSOR_ARCHITECTURE%

  • อย่างไรก็ตามสิ่งนี้สามารถให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับวิธีการเปิดพรอมต์คำสั่ง เพื่อหลีกเลี่ยงการได้รับ“ผลที่ไม่คาดคิด” เนื่องจาก WOW64คุณสามารถอ่านได้โดยตรงจากรีจิสทรี (ไมโครซอฟท์ทำไม่น้อยกว่าสองในความผิดพลาดที่สำคัญ ):

    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 บิตและ 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
  • พีซีที่ใช้ x64

พีซีที่ใช้ x64

หรือถ้าเปลี่ยนกลับเป็นเครื่องมือ 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 สำหรับการแก้ไขคุณได้ลบข้อมูลสำคัญไปยังคำตอบแล้วจึงดำเนินการแนะนำข้อบกพร่องจริง ๆ
Justin

1
แทนที่จะส่งออกท่อผ่านคำสั่ง "buggy" ของ buggy ของ Microsoft คุณสามารถให้ REG.EXE ดึงค่าที่แน่นอนด้วยสวิตช์ / v: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga

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"

แหล่งที่มา: /superuser//a/293143/249349


-1

ใช้ส่วนต่อประสาน WMI ภายใต้พรอมต์คำสั่ง เปิดพรอมต์คำสั่งในฐานะผู้ดูแลระบบแล้วพิมพ์wmic OS get OSArchitectureและกดEnter

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.