1

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

Поскольку , как представляется, отсутствие надлежащей документации на веб - сайте MS (они являются ближе я могу найти, SE темы здесь и здесь также применимы), мои вопросы (и наблюдения) можно классифицировать следующим образом .

  1. Тип переменной

    • MS документирует, что это может быть String, Expandable String или Multistring.
    • По умолчанию это стандартная строка.
    • Если используется несколько строк, распознается только первая строка.
    • Кажется, моя система периодически возвращается к стандартной строке после первого расширения переменных (с фиксированными значениями) из расширяемой строки.
    • Я не уверен, что это Microsoft Updates или мошеннические установщики, которые изменяют тип обратно на стандартную строку.
  2. Слои переменных переменных среды

    • На сколько слоев расширения переменных я могу положиться? Этот поток SE, кажется, указывает на то, что он непредсказуем.
      • Прямо сейчас у меня есть Path=%A_ProPath% где A_ProPath - еще одна расширяемая строка, которая начинается %_SysPWin%;%_SysPIntel%;%_SysPVSdotNET%;%_SysPPy%;%_SysPPerl%;%_SysPChoc%;%_SysPJava%;%_SysPSQL%; ,
      • Однако если внутри% _SysPIntel% я ссылаюсь на% _Intel_SW% (C:\Program Files (x86)\IntelSWTools), это не расширяется.
    • Я получал разные результаты, если бы у меня был установлен тип переменной, который можно расширять, но без каких-либо ссылок %var% внутри по сравнению с простым заданием типа переменной стандартной строки. Кажется, что ссылки на стандартные строки чаще расширяются, чем ссылки на расширяемые строки. Почему это?
  3. Последовательность расширения расширяемых строк

    • Расширение переменной не является рекурсивным, поэтому с циклическими ссылками проблем не возникает
    • Похоже, что расширение происходит только в алфавитном порядке и только за один проход (на уровень: система, а затем пользователь).
    • Порядок добавления или изменения значений переменных не имеет значения
    • Переменные нечувствительны к регистру
    • Path в системных переменных совпадает с %PATH% или %path% в окне командной строки).
    • Я не знаю, все ли они преобразуются в один случай до алфавитизации.

      1. Я полагаю, что я начал делать _ чтобы приводить имена переменных, потому что любые значения были в алфавитном порядке после того, как Path не расширялся в моем пути, но это может означать, что вы не можете использовать% SystemRoot% или% WinDir% непосредственно в пути. Есть ли в этом смысл?

      2. Предполагая, что переменные среды расширяются в порядке их алфавитного вида, я также предполагаю, что переменные среды нечувствительны к регистру. Но при сортировке против неалфавитных символов оцениваются ли переменные среды, как если бы какие-либо буквы были в нижнем регистре, а затем сравнивались по значению ascii (например, perlre [0-9\- _] все встречаются до az)? или в верхнем регистре перед сравнением ascii (_ идет после алфавита)?

      3. Какой набор допустимых символов используется в именах переменных? Можно ли использовать ~[]() и т.д.? ?*!.?

      4. Если есть системная переменная среды с именем PATH и пользовательская переменная PATH, какая оценка выполняется в первую очередь? Может ли мой пользовательский PATH ссылаться на пользовательские переменные системного уровня?

0