Написание простого командного файла для настройки переменной? - PullRequest
0 голосов
/ 20 мая 2010

Я хочу написать простой пакетный файл, в котором я хочу настроить переменную среды на основе архитектуры машины. Это как показано ниже:

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%

На 64-битной машине с архитектурой AMD64 JAVA_ROOT будет отображаться как C: \ Progra ~ 2 \ Java \ j2re1.4.2_13 'в операторе echo Но когда я запускаю приложение, которое использует этот файл, первое значение JAVA_ROOT будет выбрано 'C: \ Progra ~ 1 \ Java \ j2re1.4.2_13'. Я понятия не имею, почему это происходит в части «если», хотя я работаю на 64-битной Windows7. Когда я повторил

Ответы [ 2 ]

2 голосов
/ 23 декабря 2010

Альтернативное решение, которое не зависит от переменных 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

Это работает для меня, может работать и для вас.

0 голосов
/ 20 мая 2010

Если вы запускаете пакетный файл, используя %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 для вызова подпрограммы. (Использование более выразительного языка было бы еще лучше, но это не отвечает на вопрос.)

...