0

マシンのアーキテクチャに基づいて環境変数を設定する簡単なバッチ ファイルを作成したいと考えています。以下の通りです。

set ARCH=%PROCESSOR_ARCHITECTURE%
echo %ARCH%
if %ARCH%==x86 (
  set JAVA_ROOT=C:\Progra~1\Java\j2re1.4.2_13
) else (
  set JAVA_ROOT=C:\Progra~2\Java\j2re1.4.2_13
)
echo JAVA_ROOT is %JAVA_ROOT%

アーキテクチャが「AMD64」である 64 ビット マシンでは、JAVA_ROOT は echo ステートメントで「C:\Progra~2\Java\j2re1.4.2_13」として表示されます。しかし、このファイルを使用するアプリケーションを実行すると、JAVA_ROOT の最初の値が「C:\Progra~1\Java\j2re1.4.2_13」として取得されます。これを64ビットのWindows7で実行しているにもかかわらず、なぜ「if」の部分に入るのかわかりません。私が反響したとき

4

2 に答える 2

2

x64固有の変数に依存しない代替ソリューション:

IF NOT EXIST %WINDIR%\SysWOW64\regedit.exe GOTO PLATX86
:PLATX64
ECHO PLATFORM IS X64
GOTO PLATDONE
:PLATX86
ECHO PLATFORM IS X86
GOTO PLATDONE
:PLATDONE

それは私のために働きます、あなたのためにも働くかもしれません。

于 2010-12-23T07:56:29.577 に答える
0

64 ビット Windowsを使用してバッチ ファイルを実行している場合%SystemRoot%\syswow64\cmd.exe、おそらく 32 ビット アプリから起動しているために、 は ではなく%PROCESSOR_ARCHITECTURE%に等しくなります。この状況を検出するには、変数を使用できます。詳細については、ブログ投稿をご覧くださいx86AMD64%PROCESSOR_ARCHITEW6432%

%ProgramFiles%ただし、32 ビット Java パスを見つけたいだけの場合は、次の変数を使用すると WOW64 が処理してくれるので、心配する必要はありません。

if "%PROCESSOR_ARCHITECTURE%" == "x86" set JAVA_ROOT=%ProgramFiles%\Java\j2re1.4.2_13
if "%PROCESSOR_ARCHITECTURE%" == "AMD64" set JAVA_ROOT=%ProgramFiles(x86)%\Java\j2re1.4.2_13
if not defined JAVA_ROOT (
  echo Unsupported processor architecture.
  exit /b 1
)
if not exist %JAVA_ROOT%\. (
  echo Java 1.4.2_13 is not installed.
  exit /b 1
)

if condition ( command ) else ( command )設定のフォームを避けたことに注意してくださいJAVA_ROOT。これは、%ProgramFiles(x86)%かっこが含まれcmd.exeているためです。その形式を使用すると、if ステートメントが誤って解析される可能性があります。より複雑なコマンドまたはより複雑な条件については、 を使用callしてサブルーチンを呼び出す方がよい場合があります。(より表現力豊かな言語を使用するとさらに良いでしょうが、それは質問の答えにはなりません。)

于 2010-05-20T02:09:05.020 に答える