2

На моем компьютере с Windows 7 я создал несколько пользовательских переменных среды пользователя (щелкните правой кнопкой мыши компьютер> свойства> "Дополнительные параметры системы"> «Переменные среды ...»> «Новый ...» для «Пользовательские переменные для ...»). ) но когда я повторяю их в командной строке, кажется, не распознает один. Например, вот что у меня было:

UTILS_HOME  C:\myUtils
UTILS_WILDFLY  %UTILS_HOME%\wildflyUtils

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

PATH  %UTILS_HOME%;%UTILS_WILDFLY%

Когда я повторяю ПУТЬ, я получаю это:

C:\mytils;%UTILS_WILDFLY%

Я ожидаю, что это расширит UTILS_WILDFLY, но это не так. Теперь, если я изменю имя UTILS_WILDFLY на JBOSS_8, когда я повторю путь, он расширится. Я попробовал несколько имен для тестирования и не понимаю, почему некоторые расширяются, а почему нет. Когда они не раскрываются, я не могу получить доступ к своим сценариям в этой папке в командной строке.

Есть ли какое-то правило, о котором я не знаю, для именования переменных среды, или это так, как оно работает, и я должен делать проб и ошибок, пока не найду тот, который работает?

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

2 ответа2

4

Проблема в том, что вы используете рекурсивное расширение, то есть PATH ссылается на UTILS_WILDFLY, которая сама ссылается на UTILS_HOME.

Рекурсивное расширение не всегда работает; по-видимому, это означает, что он не поддерживается, поэтому нет гарантии, что он когда-либо будет работать - что означает, что вы не должны его использовать - но на практике это иногда работает, что приводит к путанице.

В частности, в Windows 7 он работает тогда и только тогда, когда переменная в середине рекурсивного расширения (UTILS_WILDFLY) появляется перед раскрываемой переменной (PATH) в списке переменных в реестре. Как это происходит, переменные среды расположены в алфавитном порядке.

В твоем случае,

  • UTILS_WILDFLY> PATH, так что это не работает.

  • JBOSS_8 <PATH, это так.

PATI не будет работать, но PATG будет.

0

Я тоже сталкивался с таким вопросом. Хотя этот вопрос решен, я хотел бы дать быстрый обходной путь для будущих пользователей.

В моей ситуации я создал две переменные env: JAVA_HOME и GRADLE_HOME .

D:\>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_121

D:\>echo %GRADLE_HOME%
D:\Program Files\gradle-3.5

Затем %JAVA_HOME%\bin и %GRADLE%_HOME\bin для Path . Но по echo %Path% ,

D:\Program Files\Java\jdk1.8.0_121\bin;D:\Program Files\Java\jdk1.8.0_12 1\jre;%GRADLE_HOME%\bin;%GROOVY_HOME%\bin; Такая же ситуация.

Я также проверил reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v * предложенный @eryksun, результат в алфавитном порядке. Таким образом, ответом на основную причину этого вопроса может быть не Windows расширяет env var в алфавитном порядке.

Мой обходной путь,

GRADLE_HOME -> GGRADLE_HOME затем, вернитесь назад. GGRADLE_HOME -> GRADLE_HOME

Надеюсь, что кто-то опытный в Windows может дать объяснение такого рода проблем.

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