Após algumas tentativas, consegui criar algumas regras básicas de variáveis de ambiente ao trabalhar com ferramentas de linha de comando e PATH.
1º. A) Comprimento : Nenhuma Variável deve ser maior que 2047 . Se houver variáveis maiores que 2047, as variáveis após elas não serão expandidas, não aparecerão e o caminho se tornará nulo, PATH = (null).
É muito improvável que chegue aqui, mas como isso acontece, eu estava nessa situação e esse era o problema principal, no entanto, essa limitação é complicada, porque só entra em vigor depois de editar as variáveis de ambiente no editor. Configurações / SystemPropertiesAdvanced.exe). Ele não terá nenhum efeito negativo se as variáveis forem deixadas sem edição após a inicialização, mas, se o child explorer for executado para navegar em um processo separado, os consoles de comando abertos a partir dessas janelas do explorador serão afetados.
1º. B) Qual Comprimento? Não importa. Se uma variável é usada no Console de Comando, ela é limitada de qualquer maneira a 2047 caracteres de valor, expandidos ou declarados.
Declarado :
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.
Expandido :
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
2º. Lugar : Variáveis expansíveis não se expandem recursivamente . No registro eles são do tipo REG_EXPAND_SZ, no Editor de variáveis de ambiente eles são definidos se o caractere% é digitado. Se houver tais variáveis declaradas, isso precisa ser feito para que elas sejam inicializadas antes do PATH. Variáveis normais não têm esse problema. Eles podem ser declarados após o PATH e seus valores ainda serão exibidos.
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
A variável y não foi expandida dentro de c porque foi declarada após c, mas foi expandida no clone de c, z.
Portanto, para manter o PATH ativo e bem, não deve haver nenhuma variável longa antes dela e ela pode conter variáveis expansíveis, desde que sejam declaradas antes de Path em uma hierarquia alfabética (de a a o). Tudo isso mantendo um valor final abaixo de 2048.