CLI에서 Windows Server 버전 32/64 비트 감지


답변:


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"

( /IXP / 2003 / 2008 / etc에서 작동하도록 포함 )


systeminfo | find "System type" Capitol T는 아무것도 반환하지 않아야합니다 .
Nathan DeWitt

그렇습니다. 네이버 감사합니다! 물론 / I 스위치를 사용하여 대소 문자를 구분하지 않을 수도 있습니다.
Joshua

실제로 수도 'T'인 Server 2008. 어느 쪽이든. 답변 주셔서 감사합니다-완벽합니다.
romant

좋아! 계속해서 / I 스위치를 systeminfo에 포함 시켜서 대문자 t인지 여부를 알 수 있습니다! :)
Joshua

22

어때요 :

echo %PROCESSOR_ARCHITECTURE%

32 비트 시스템에서는 x86 을, 64 비트 시스템에서는 AMD64 (또는 IA64 )를 반환 합니다.


2
이것은 어떻게 투표를 했습니까? oO (+1)
Apache

1
이것은 다른 사람이 게시 한 디렉토리 의 존재를 확인 하는 것보다 훨씬 나은 솔루션Program Files (x86) 입니다. 당신은 할 수 의 존재를 확인 %PROGRAMFILES(X86)%(이 경우 환경 변수를 하지 않는 존재, 다음에 x86 머신에있어).
획기적인

3
>이 투표는 어떻게 되었습니까? 어쩌면 그것은 때문에 하지 신뢰할 .
Synetech

2
이 답변에 문제가 있습니다 !! - stackoverflow.com/questions/1738985/...
T.Todua

9
systeminfo 

약 10 개의 필드 아래에 시스템 유형이라는 필드가 있습니다. x86 또는 x64인지 알려줍니다.


8
systeminfo | find /I "System type"

이것은 로케일에 따라 다르며 느립니다 .

echo %PROCESSOR_ARCHITECTURE%

공지 사항, 그것의 그 86 32 비트로 cmd.exe.

올바른 방법 :

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로 인해 "예기치 않은 결과"가 발생하는 것을 방지하기 위해 레지스트리에서 직접 읽을 수 있습니다 (Microsoft는 키에 오타를 두 번 이상 입력 하지 않았습니다 ).

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

  • 또한 레지스트리에서 하드웨어 정보 저장소를 읽는 것이 좋습니다.

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

  • 64 비트 시스템에만 존재하므로 x86 버전의 Program Files디렉토리 (또는 디렉토리 를 가리키는 환경 변수) 가 있는지 확인할 수도 있습니다. 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 기반 PC
  • x64 기반 PC

x64 기반 PC

또는 구식 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은 답변에 대한 중요한 정보를 제거한 다음 실제로 버그를 도입했습니다.
저스틴

1
Microsoft의 버그가있는 "찾기"명령을 통해 출력을 파이핑하는 대신 REG.EXE가 / v 스위치를 사용하여 정확한 값을 가져 오도록 할 수 있습니다. reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga

0

더 나은 솔루션 :

방법 1 :
(와 두 단계 검증 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"
)

방법 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.