Я пытаюсь понять, как вы узнаете, будет ли расширяемая строка правильно раскрыта в переменной окружения Path
пользователя.
Поскольку , как представляется, отсутствие надлежащей документации на веб - сайте MS (они являются ближе я могу найти, SE темы здесь и здесь также применимы), мои вопросы (и наблюдения) можно классифицировать следующим образом .
Тип переменной
- MS документирует, что это может быть String, Expandable String или Multistring.
- По умолчанию это стандартная строка.
- Если используется несколько строк, распознается только первая строка.
- Кажется, моя система периодически возвращается к стандартной строке после первого расширения переменных (с фиксированными значениями) из расширяемой строки.
- Я не уверен, что это Microsoft Updates или мошеннические установщики, которые изменяют тип обратно на стандартную строку.
Слои переменных переменных среды
- На сколько слоев расширения переменных я могу положиться?
Этот поток SE, кажется, указывает на то, что он непредсказуем.
- Прямо сейчас у меня есть
Path=%A_ProPath%
где A_ProPath - еще одна расширяемая строка, которая начинается%_SysPWin%;%_SysPIntel%;%_SysPVSdotNET%;%_SysPPy%;%_SysPPerl%;%_SysPChoc%;%_SysPJava%;%_SysPSQL%;
, - Однако если внутри% _SysPIntel% я ссылаюсь на% _Intel_SW% (C:\Program Files (x86)\IntelSWTools), это не расширяется.
- Прямо сейчас у меня есть
- Я получал разные результаты, если бы у меня был установлен тип переменной, который можно расширять, но без каких-либо ссылок
%var%
внутри по сравнению с простым заданием типа переменной стандартной строки. Кажется, что ссылки на стандартные строки чаще расширяются, чем ссылки на расширяемые строки. Почему это?
- На сколько слоев расширения переменных я могу положиться?
Этот поток SE, кажется, указывает на то, что он непредсказуем.
Последовательность расширения расширяемых строк
- Расширение переменной не является рекурсивным, поэтому с циклическими ссылками проблем не возникает
- Похоже, что расширение происходит только в алфавитном порядке и только за один проход (на уровень: система, а затем пользователь).
- Порядок добавления или изменения значений переменных не имеет значения
- Переменные нечувствительны к регистру
Path
в системных переменных совпадает с%PATH%
или%path%
в окне командной строки).Я не знаю, все ли они преобразуются в один случай до алфавитизации.
Я полагаю, что я начал делать
_
чтобы приводить имена переменных, потому что любые значения были в алфавитном порядке после того, как Path не расширялся в моем пути, но это может означать, что вы не можете использовать% SystemRoot% или% WinDir% непосредственно в пути. Есть ли в этом смысл?Предполагая, что переменные среды расширяются в порядке их алфавитного вида, я также предполагаю, что переменные среды нечувствительны к регистру. Но при сортировке против неалфавитных символов оцениваются ли переменные среды, как если бы какие-либо буквы были в нижнем регистре, а затем сравнивались по значению ascii (например, perlre
[0-9\- _]
все встречаются до az)? или в верхнем регистре перед сравнением ascii (_
идет после алфавита)?Какой набор допустимых символов используется в именах переменных? Можно ли использовать
~[]()
и т.д.??*!.
?Если есть системная переменная среды с именем PATH и пользовательская переменная PATH, какая оценка выполняется в первую очередь? Может ли мой пользовательский PATH ссылаться на пользовательские переменные системного уровня?