После некоторых попыток мне удалось придумать некоторые базовые правила для переменных среды при работе с инструментами командной строки и PATH.
Первый. A) Длина: переменная не должна быть длиннее 2047. Если есть переменные длиннее 2047, переменные после них не будут расширяться, не будут отображаться, и Path станет пустым, PATH =(пустым).
Маловероятно, что он прибудет сюда, но, как это бывает, я оказался в такой ситуации, и это было главной проблемой, однако это ограничение сложно, поскольку оно вступает в силу только после редактирования переменных среды в редакторе (Advanced System Settings / SystemPropertiesAdvanced .EXE). Это не будет иметь никакого отрицательного эффекта, если переменные останутся неотредактированными после загрузки, но, если дочерний проводник будет запущен для просмотра в отдельном процессе, это повлияет на командные консоли, открытые из этих окон проводника.
Первый. Б) какая длина? Это не важно Если переменная используется в командной консоли, она ограничена в любом случае значением 2047 символов, расширенным или объявленным.
Объявлено:
ex:
x = %variable001%;%variable002%;%variable003%;...;%variable146%;%variable147%
Won't work.
Up to 146, it will because x won't be longer than 2047.
But 147 will kill it. Length of %variable???%; x 147 = 2058.
Расширен:
ex:
x001 = C:\Program Files
x002 = C:\Program Files
x003 = C:\Program Files
...
x120 = C:\Program Files
x121 = C:\Program Files
z = %x001%;%x002%;%x003%;...;%x120%;%x121%;
Will work but will show only up to x120 and part of x121.
Length of C:\Program Files; x 120 = 2040 + C:\Prog of x121
Второй. Место: расширяемые переменные не расширяются рекурсивно. В реестре они имеют тип REG_EXPAND_SZ, в редакторе переменных окружения они устанавливаются, если вводится символ%. Если объявлены такие переменные, это нужно сделать так, чтобы они были инициализированы до PATH. Нормальные переменные не имеют этой проблемы. Они могут быть объявлены после PATH, и их значения будут отображаться.
ex:
a = C:\Windows
b (exp) = %SystemRoot%
c (exp) = %a%;%b%;%x%;%y%
x = C:\Windows
y (exp) = %SystemRoot%
z (exp) = %a%;%b%;%x%;%y%
echo %c% will output C:\Windows;C:\Windows;C:\Windows;%y%
a b x y
echo %y% will output C:\Windows
echo %z% will output C:\Windows;C:\Windows;C:\Windows;C:\Windows
a b x y
Переменная y не была расширена внутри c, потому что она была объявлена после c, но была расширена в клоне c, z.
Таким образом, чтобы поддерживать PATH живым и здоровым, перед ним не должно быть длинной переменной, и она может содержать расширяемые переменные, если они объявлены перед Path в алфавитной иерархии (от a до o). Все время сохраняя окончательное значение длины ниже 2048.