Problema estranho de PATH no Windows 7 - fica nulo depois de ser definido

3

Eu tenho algum tipo de problema com a variável de sistema PATH. Desde que eu uso um monte de aplicativos e scripts cmd eu adicionei muito a ele. Mas o comprimento da string não é o problema. Eu trabalhei em torno dessa limitação.

Advanced System Properties é o único aplicativo que notei inicializar a variável PATH corretamente após uma edição. Se eu editar o registro manualmente, os aplicativos não usarão a versão atualizada do PATH. Então eu tenho que usá-lo ou manter o loggin ligado e desligado.

No entanto, ultimamente, depois de definir alguns valores de PATH nesse aplicativo, ele sempre acaba sendo (null), mesmo que seja a mesma string. Uma vez que eu pressione OK, fica escuro. As entradas do registro ainda estão lá. Eu tenho que fazer logoff ou reiniciar para o PATH para ser preenchido com o que está em sua entrada de registro.

Eu até reduzi para% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem Ainda assim, PATH = (null) e% windir% estão mortos.

Deixe sozinho, funciona.

Edite, não. Não até eu reiniciar.

Então, alguma idéia? ... sobre por que as propriedades avançadas do sistema estão se comportando assim ao atualizar as variáveis do sistema. Eu acredito que este é o problema, já que é um aplicativo de inicialização e desde que em um reinício limpo tudo funciona.

    
por JasonXA 20.02.2014 / 16:45

3 respostas

7

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.

    
por 21.02.2014 / 00:38
2

Eu tive a mesma experiência! Seu "PATH" é simplesmente muito grande!

O PATH não pode ser maior que "um certo número de caracteres", não se lembra de quantos.

De qualquer forma, esse limite é imposto na janela do painel de controle que permite editá-lo.

SE você abrir o registro e apenas adicionar texto a ele, poderá aumentá-lo; mas fazendo isso você está apenas transbordando.

Um efeito colateral interessante é que% windir% também perde seu valor.

Claro, no registro, ambos são preenchidos com bytes, mas as janelas não podem lê-los.

Então a solução é:

  1. abra o editor PATH no painel de controle
  2. excluir um caractere
  3. tente adicionar um, digamos, um 'a' (pressionando a tecla 'a')
  4. Se você não puder adicionar o 'a', repita a partir do passo 2. Caso contrário, parabéns: você encontrou o limite do PATH. Você não pode torná-lo maior que isso
por 20.02.2014 / 17:36
2

Eu consertei esse problema redefinindo a variável PATH usando o caminho de estilo do DOS antigo.

Nome longo da pasta - c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC

Nome abreviado equivalente - c:\PROGRA~2\MICROS~1.0\VC

Obrigado ao Timbo pela solução for %I in (.) do echo %~sI para obter o caminho do DOS. POST

Espero que isso ajude a resolver o problema.

    
por 27.02.2015 / 21:36