Anexar à variável PATH do sistema sem incluir a variável PATH do usuário

Anexar à variável PATH do sistema sem incluir a variável PATH do usuário

Imagine as seguintes variáveis ​​de ambiente:

SistemaCAMINHO = C:\Windows
BobDo utilizadorCAMINHO =C:\Users\Bob

Em um prompt de comando, o PATHcomando retornaC:\Windows;C:\Users\Bob

Depois de corrersetx /m PATH "C:\Node;%PATH%"
SistemaCAMINHO =C:\Node;C:\Windows;C:\Users\Bob

Em um novo prompt de comando, o PATHcomando retornaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob


Outro usuário , Alice, faz login.Do utilizadorCAMINHO =C:\Users\Alice

Em um prompt de comando, o PATHcomando retornaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice

Bob tem um caminho duplicado em sua PATHvariável e Alice tem os caminhos de Bob em sua PATHvariável.

Existe uma maneira de anexar ao sistema PATHsem poluí-lo com o usuário atual PATH?

Responder1

No Windows 7, você pode procurar o caminho do sistema com

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

Se isso ainda funcionar no Windows 8, use-o para criar o novo valor.

Você terá que descobrir como analisar a saída de reg query. Aqui está algo que pode funcionar:

for /f "tokens=1,2*" %a in (' reg query "HKLM\…\Environment" /v path ') defina currentValue=%c

onde

  • a string é o comando (fornecido acima) entre aspas simples.'reg query "HKLM\…\Environment" /v path'reg query
  • a, currentValuee csão nomes de variáveis. Você pode escolher quaisquer nomes de variáveis ​​que desejar, com as restrições de que the ae the cdevem ser letras únicas, separadas por duas letras (por exemplo, você pode usar nand p, ou xand z).
  •                             for /f "options" %variable in ('command1') do command2
    executa , analisa a saída, atribui valores ao (s) ( , acima; mas veja também abaixo) e executa .command1%variable%acommand2
  • tokens=1,2*significa que %aobtém o primeiro token (palavra) de cada linha (restante), %bobtém a segunda palavra e %cobtém o restante da linha.

    • A primeira palavra é path(o nome do valor).
    • A segunda palavra é REG_EXPAND_SZ(o tipo de valor).
    • O resto da linha é o valor.

    (Você poderia simplesmente usar tokens=2*e então currentValue=%b.)

Então, depois de executar o acima, você deverá ser capaz de fazer

setx PATH "C:\Node;%currentValue%" /m
  • Se você fizer isso em um script (um .BATarquivo), use %%ae %%c.
  • Certifique-se de testar isso com echocomandos antes de fazer isso com setx.

Responder2

Não coloque o caminho específico de Bob no valor System Path usado por todos.

Leia o valor antigo do caminho do sistema, modifique-o e defina o novo valor. Se cmd.exe(aparentemente o setcomando pode criar/modificar/excluir, mas não ler) não fornecer esses recursos, coloque-o em um programa chamado pelo arquivo em lote.

O valor do caminho do sistema é encontrado (e alterado) por meio do Registro. Eu apenas procuro o valor que sei que tem para descobrir exatamente onde, o Google esse caminho chave para verificar o que foi dito sobre isso.
(mais tarde: eles são HKLM\System\CurrentControlSet\Control\Session Manager\Environmente HKCU\Environment)

Qualquer linguagem de script mais avançada para Windows, ou com suporte à API do Windows, pode lidar com isso. Ou um programa compilado executável no idioma de sua escolha.

ele shell de substituição CMDAssuma o comandotem uma função @REGQUERY:

echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]

já que parece que você tem uma máquina específica em mente, você pode instalarTCC/LE (grátis)e use isso para interpretar seu arquivo em lote.

informação relacionada