Если вы запускаете пакетный файл, используя %SystemRoot%\syswow64\cmd.exe
в 64-битной Windows, возможно, потому что вы запускаете его из 32-битного приложения, тогда %PROCESSOR_ARCHITECTURE%
будет равно x86
, а не AMD64
. Чтобы обнаружить эту ситуацию, вы можете использовать переменную %PROCESSOR_ARCHITEW6432%
. Вот сообщение в блоге с дополнительной информацией .
Однако, если вы просто хотите найти 32-битный путь Java, вам не нужно об этом беспокоиться, потому что WOW64 позаботится об этом за вас, если вы используете переменную %ProgramFiles%
:
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)%
содержит круглые скобки, что приведет к неправильному синтаксическому анализу оператора if, если я воспользуюсь этой формой. Для более сложных команд или более сложных условий лучше использовать call
для вызова подпрограммы. (Использование более выразительного языка было бы еще лучше, но это не отвечает на вопрос.)