11
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windowsバッチファイルにおける x86/x64判定

Posted at

#環境変数PROCESSOR_ARCHITECTUREを利用する場合

基本ですが、環境変数PROCESSOR_ARCHITECTUREを利用利用してアーキテクチャ判定が可能です。

rem 条件分岐の例 
if "%PROCESSOR_ARCHITECTURE%" EQU "x86"   goto :ARCH_X86
if "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" goto :ARCH_X64
echo 未対応環境です & goto:EOF

:ARCH_X86
echo x86環境です
goto :EOF

:ARCH_X64
echo x64環境です
goto :EOF
rem 実行ファイルを別の環境変数に設定する例
if "%PROCESSOR_ARCHITECTURE%" EQU "x86"   SET SETUPFILE=SETUP.EXE
if "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" SET SETUPFILE=SETUP64.EXE
if NOT EXIST "%SETUPFILE%" echo 未対応環境です & goto:EOF

"%SETUPFILE%"

ちなみに、PROCESSOR_ARCHITECTUREが返す値はx86,x64の他にIA64,ARM,ARM64等があるようです(昔はMIPSやALPHAなどという物も存在したらしいですが…)
今後もIoTCoreやx86エミュレーション可能なARM系Windowsも出てくるようなので、x86以外はx64と決めつけ、

rem だめな例1
if "%PROCESSOR_ARCHITECTURE%" EQU "x86" (
  goto :ARCH_X86
) else (
  goto :ARCH_X64
)
rem だめな例2
if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" goto :ARCH_X64

などと記述するのは将来に禍根を残したくなければ止めたほうが懸命かもしれません。

#環境変数**ProgramFiles(x86)**を利用する例
環境に依存せずに32bit用Program Filesフォルダを取得する方法です。
バッチファイルを利用したアプリのサイレントインストール場合、事前にインストール場所を決めたり、事後にパッチ等をあてる場合等に便利かもしれません。

set PF32=%ProgramFiles(x86)%
if not exist "%PF32%" set PF32=%ProgramFiles%
echo 32bitのProgram Filesフォルダは %PF32%

x86環境で実行すると、環境変数***ProgramFiles(x86)**が定義されていないためず"%ProgramFiles(x86)%"という文字列がそのまま入ってきてしまいます。
普通はそんなパスは存在しないので、空の場合は改めて%ProgramFiles%を取得しています。

11
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?