3

Я хочу определить две переменные среды следующим образом:

PROGRAM_HOME=P:
JAVA_DIR=%PROGRAM_HOME%\Java

Очевидно следующие работы:

dir %PROGRAM_HOME%

Но следующее не делает:

dir %JAVA_DIR%

Что мне делать в том случае, если я хочу определить JAVA_DIR в терминах PROGRAM_HOME?

РЕДАКТИРОВАТЬ: удалены \ (это была опечатка)

PROGRAM_HOME = P:\ ==> PROGRAM_HOME = P:

3 ответа3

4

Я думаю, что это потому, что вы повторяете «\».

Когда я делаю следующее:

>set %program_home%=c:\
>set %java_dir%=%program_home%java
>dir %java_dir%

все отлично работает

Конечно, альтернативой является:

>set %program_home%=c:
>set %java_dir%=%program_home%\java
>dir %java_dir%

Вы можете проверить значения различных переменных среды, просто введя команду set без параметров. Тогда вы увидите, что ваша переменная %java_dir% содержит c:\\java .

2

Да, это действительно странное поведение, которое я никогда не находил документированным, но вот что работает.

Используя приведенный выше пример, поместите кавычки вокруг переменной в последней строке:

dir "% JAVA_DIR%"

Если кто-то знает причину этого или ссылку, объясняющую это, это было бы здорово. Тем не менее, поведение является последовательным при обращении к переменной, которая была частично определена с другой переменной.

1

Помимо синтаксической ошибки, найденной fretje, если вы хотите сделать эти переменные постоянными, вам нужно изменить переменные среды Windows.

Это делается в панели управления / вкладка «Система» / «Дополнительно» / «Переменные среды ...».

Существует также небольшой продукт под названием Rapid Environment Editor (donationware), который обеспечивает более понятный пользовательский интерфейс.

РЕДАКТИРОВАТЬ

Я думаю, что теперь я понимаю, что вы пытаетесь сделать, но это можно сделать только путем редактирования реестра. В следующей статье Microsoft описывается процесс, которому нужно следовать:
Как распространить переменные среды в систему.

В двух словах, для пользовательских переменных среды вам нужно перейти в раздел реестра HKEY_CURRENT_USER\Environment, где хранятся все эти переменные.

Там вам нужно добавить две переменные типа REG_EXPAND_SZ (в regedit с именем "значение расширенной строки"). Это единственный способ добавить этот тип, поскольку Windows по умолчанию будет добавлять только типы REG_SZ, которые просто невозможно расширить.

Я попробовал это только сейчас, и это прекрасно работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .