Чи можу я визначити змінну середовища Windows (XP) у вигляді іншої змінної середовища?


3

Я хочу визначити дві змінні середовища так:

PROGRAM_HOME=P:
JAVA_DIR=%PROGRAM_HOME%\Java

Очевидно такі роботи:

dir %PROGRAM_HOME%

Але наступне:

dir %JAVA_DIR%

Що робити у випадку, якщо я хочу визначити JAVA_DIR з точки зору PROGRAM_HOME?

EDIT: видалено \ (це було друком)

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


Що саме "не працює"? Ви отримуєте повідомлення про помилку?
fretje

"Система не може знайти вказаний файл." Це тому, що якщо я встановлю змінну в діалоговому вікні GUI, змінна% PROGRAM_HOME% не розширюється. Я, до речі, використовую швидкий редактор середовища.
Янєєве

Тоді, очевидно, ваша проблема полягає в тому, що редактор Rapid Environment не підтримує розширення інших змінних середовища.
fretje

Відповіді:


1

Крім синтаксичної помилки, виявленої fretje, якщо ви хочете зробити ці змінні постійними, вам потрібно змінити змінні середовища Windows.

Це робиться на кнопці Панель управління / Система / Вкладка Додатково / Змінні середовища ...

Також є приємний маленький продукт під назвою Rapid Environment Editor (пожертвування), який забезпечує більш чіткий користувальницький інтерфейс.

EDIT

Я думаю, я зараз розумію, що ти намагаєшся зробити, але це можна зробити, лише відредагувавши реєстр. Наступна стаття Microsoft пояснює наступний процес:
Як розповсюджувати змінні середовища в системі .

У двох словах, для змінних середовищ користувача потрібно перейти до ключа реєстру HKEY_CURRENT_USER \ Environment, де зберігаються всі ці змінні.

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

Я спробував це тільки зараз, і він працює чудово.


Я використовую цей редактор, але він може лише "розширити" env vars, вбудований в інші env vars, на глибину 1, сподіваюся, я зрозумів себе
Yaneeve

Зрозумів! Дивіться мою редакцію.
harrymc

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.


ОК, це працює, але я хотів би встановити Vrs, раз і назавжди, не через cmd. Що б ти запропонував?
Янеєве

1
Yaneeve, я думаю, ви можете неправильно прочитати його відповідь. Видаліть \ in "JAVA_DIR =% PROGRAM_HOME% \ Java" у змінній вашого середовища, і вона повинна працювати. Зауважте, що синтаксис fretje, що використовується тут із набором, може використовуватися однаково зі змінними системного середовища.
RJFalconer

2

Так, це дійсно дивна поведінка, яку я ніколи не знаходив документально, але ось що працює.

Використовуючи приклад вище, поставте лапки навколо змінної в останньому рядку:

реж. "% JAVA_DIR%"

Якщо хтось знає, чому це, або посилання, що пояснює це, було б чудово. Поведінка є послідовною, хоча стосується змінної, яка була визначена частково з іншою змінною.


Чомусь це працює лише в тому випадку, якщо я використовую команду 'set' для визначення змінної в межах одного процесу, а не інакше: |
Yaneeve
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.