web-dev-qa-db-ja.com

CLIでWindows Serverバージョン32/64ビットを検出する

コマンドラインからWindows Serverの32ビットバージョンと64ビットバージョンのどちらを実行しているかを検出するための最良かつ最も迅速な方法は何ですか?

(Cygwinがインストールされています)

17
romant

少し速い方法は、%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"

(XP/2003/2008/etcで機能する/Iを含む)

12
Joshua

どうですか:

echo %PROCESSOR_ARCHITECTURE%

これにより、32ビットシステムではx86が返され、64ビットシステムではAMD64(またはIA64)が返されます。

22
Gaff
systeminfo 

それはかなりリストアップします、およそ10のフィールドがそこにあるシステムタイプと呼ばれるものです。これはx86かx64かを教えてくれます

9
MDMarra
systeminfo | find /I "System type"

これはロケールに依存し、遅いです。

echo %PROCESSOR_ARCHITECTURE%

32ビットcmd.exeではx86であることに注意してください。

正しい方法:

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

WMIクエリで確認する他の方法:

パワーシェル:

(gwmi win32_computersystem).SystemType

CMD:

wmic OS get OSArchitecture 

ここから抽出: http://www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html

6
Juli

Windowsでプロセッサアーキテクチャを確認する方法は多数あります。

  • 少なくともWindows 20 以上でプロセッサアーキテクチャをチェックする最も速く、最も簡単で、最も互換性のある方法は、_PROCESSOR_ARCHITECTURE_ 環境変数 を調べることです。

    _echo %PROCESSOR_ARCHITECTURE%_

  • ただし、コマンドプロンプトを開く方法によっては、結果が異なる場合があります。 WoW64による「予期しない結果」 を取得しないようにするには、レジストリから直接読み取ることができます(Microsoftは キーに2つのタイプミス)以上を作成しています

    _reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE_

  • マイクロソフトは、レジストリからハードウェアインフォメーションストアを読み取ることも推奨しています。

    _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.
_
5
Synetech

一般的なソリューション

私は本当にこれを掘り下げて、WMIを実際に見て回る必要がありました。

私の意見で最良のオプションは、このPowerShell文字列を単に使用することです

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

これは古いWindows 2003およびXPでも機能します

答えは

  • X86ベースのPC
  • x64ベースのPC

x64ベースのPC

または、昔ながらのcmdツールに戻す場合

wmic computersystem get systemtype
3
Dennis

これは理想的な答えではありませんが、systeminfo.exeはシステムタイプ(32ビットまたは64ビットなど)を決定するための推奨される方法ですが、systeminfo.exeが作業を完了するのを待たない場合、このソリューションは少し速く実行されます。

コマンド:

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

レジストリクエリと検索文字列を正しく変更すると、Windows 95までさかのぼってオペレーティングシステムのバージョンを確認することもできます。systeminfo.exeの方がより正確で、正しいクエリ方法です。reg.exe queryの方が高速で、下位互換性があります。

2
Justin

より良いソリューション:

方法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"

ソース: https://superuser.com/a/293143/249349

0
T.Todua