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


17

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

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

回答:


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は何も返さないはずです。
ネイサンデウィット

うん、それを見逃した。ネイサンありがとう!もちろん、/ Iスイッチを使用して、大文字と小文字を区別しないようにすることもできます。
ジョシュア

Server 2008、実際には大文字の「T」。どちらにしても。答えてくれてありがとう-完璧。
ロマント

いいね!先に進み、/ Iスイッチをsysteminfoに含めて、大文字であるかどうかを判断できるようにしました!:)
ジョシュア

22

どうですか:

echo %PROCESSOR_ARCHITECTURE%

これは、返されたx86 32ビットシステム上AMD64(またはIA64 64ビットシステムの場合)。


2
どうしてこれは0票だったのですか?オブジェクト指向(1)
アパッチ

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%

それが 32ビット x86cmd.exe

正しい方法:

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

「systeminfo」の使用に関するあなたの考えに完全に同意してください。あなたの提案のためのおかげで、私が使ってきたというのが私のスクリプトの中では
abstrask

最高の答え!追加バリデーターPROCESSOR_ARCHITEW6432
T.Todua 14


5

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

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

    echo %PROCESSOR_ARCHITECTURE%

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

    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ベースの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
チタンStrga

0

より良い解決策:

方法1:
(持つ2つのステップの検証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"

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


-1

コマンドプロンプトでWMIインターフェイスを使用します。管理者としてコマンドプロンプトを開き、入力してwmic OS get OSArchitecture押しますEnter

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.