コマンドラインからWindows Serverの32ビットバージョンと64ビットバージョンのどちらを実行しているかを検出するための最良かつ最も迅速な方法は何ですか?
(Cygwinがインストールされています)
少し速い方法は、%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
を含む)
どうですか:
echo %PROCESSOR_ARCHITECTURE%
これにより、32ビットシステムではx86が返され、64ビットシステムではAMD64(またはIA64)が返されます。
systeminfo
それはかなりリストアップします、およそ10のフィールドがそこにあるシステムタイプと呼ばれるものです。これはx86かx64かを教えてくれます
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
)
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
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.
_
私は本当にこれを掘り下げて、WMIを実際に見て回る必要がありました。
私の意見で最良のオプションは、このPowerShell文字列を単に使用することです
(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType
これは古いWindows 2003およびXPでも機能します
答えは
x64ベースのPC
または、昔ながらのcmdツールに戻す場合
wmic computersystem get systemtype
これは理想的な答えではありませんが、systeminfo.exe
はシステムタイプ(32ビットまたは64ビットなど)を決定するための推奨される方法ですが、systeminfo.exe
が作業を完了するのを待たない場合、このソリューションは少し速く実行されます。
コマンド:
reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"
レジストリクエリと検索文字列を正しく変更すると、Windows 95までさかのぼってオペレーティングシステムのバージョンを確認することもできます。systeminfo.exe
の方がより正確で、正しいクエリ方法です。reg.exe query
の方が高速で、下位互換性があります。
方法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"