Impedir que o% PATH% do sistema Windows seja anexado ao usuário% PATH?

18

Eu sei como definir variáveis ​​de ambiente específicas do sistema ou do usuário:

Variáveis ​​de ambiente do Windows

Agora, o problema é que a PATHvariável é tratada de forma que o valor digitado para o PATH do usuário seja automaticamente anexado ao PATH do sistema e essa será a variável PATH efetiva.

Ou seja, diga que eu tenho

(SISTEMA) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...

e (USER) PATH=C:\Program Files\Bar\bin(observe que não existe %PATH%neste valor)

a variável de ambiente resultante para esse usuário será:

(eficaz) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...;C:\Program Files\Bar\bin

No entanto, eu gostaria que, para uma conta de usuário do SO muito específica, a variável de ambiente PATH devesse ter o bar\bindiretório no início do PATH, em vez de no final.

Existe uma maneira adequada de dizer ao Windows para substituir completamente a PATHvariável de um usuário pelo valor desse usuário, em vez de anexá-lo à PATHvariável do sistema ?

Nota: Obviamente, em um arquivo em lotes, tudo isso não importa, pois você pode definir e ajustar os env.vars como desejar.

Martin
fonte
Por que não ignorar apenas a seção USER. Exclua a variável USER Path e coloque tudo na variável SYSTEM Path, na ordem que você deseja que seja.
Kevin Fegan
1
@KevinFegan: Bem, porque alguns serviços na máquina dependem desse SISTEMA PATHe essa conta de usuário específica seria melhor atendida por ter um diferente PATH. Sei que existem muitas soluções alternativas, mas estava interessado em saber se há algo pronto para uso / no nível do sistema operacional / registro para conseguir isso.
Martin Martin

Respostas:

3

Se você precisar apenas trabalhar para sessões de prompt de comando, crie um arquivo em lote profile / init e configure-o no registro, por /programming/17404165/how-to-run-a-command-on -command-prompt-startup-in-windows . Por exemplo,

reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun ^
  /t REG_EXPAND_SZ /d "%"USERPROFILE"%\init.cmd" /f

Em seguida, basta fazer modificações no PATH nesse arquivo em lotes. Por exemplo,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%
G-Wiz
fonte
0

Eu tive o mesmo problema e isso funcionou para mim:

Você pode obter "variável de caminho do usuário" através de:

>reg query HKCU\Environment /v path

A saída (na minha máquina) é:

HKEY_CURRENT_USER\Environment
    path    REG_SZ    C:\Program Files (x86)\GnuWin32\bin

Mas então você deve analisar isso e usar a parte relevante.

Eu li a solução aqui aqui e testei na minha máquina.

user2442366
fonte
-1

Não sei como ignorar variáveis ​​de sistema, mas sei que se você usar variáveis ​​de sessão (via SETcomando), elas terão precedência sobre outras variáveis. Portanto, você pode usar as SET PATH=C:\Program Files\Bar\bininstruções e o caminho desejado será a primeira parte da variável.

Aqui está uma referência válida e relato aqui um período simples a partir dessa página:

Se variáveis ​​com o mesmo nome forem armazenadas como variáveis ​​de ambiente de usuário e de máquina, a variável de usuário terá precedência. Se uma variável de Sessão for criada, ela terá precedência sobre qualquer variável de Ambiente de Usuário e / ou Máquina com o mesmo nome.

Gabriele Bertolucci
fonte
Essa é uma referência útil, mas a primeira frase que você citou é uma generalização excessiva. A PATHvariável é uma exceção (caso especial) - a variável usuário não não têm precedência sobre a variável do sistema. O fato de uma "variável de sessão" ter precedência sobre as variáveis ​​predefinidas do usuário e do sistema é verdadeiro, mas como você define uma variável de sessão automaticamente para um usuário?  O G-Wiz respondeu a essa pergunta e, AFAICS, você não adicionou nada a essa resposta.
Scott