Imagine as seguintes variáveis de ambiente:
SistemaCAMINHO = C:\Windows
BobDo utilizadorCAMINHO =C:\Users\Bob
Em um prompt de comando, o PATH
comando 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 PATH
comando 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 PATH
comando retornaC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice
Bob tem um caminho duplicado em sua PATH
variável e Alice tem os caminhos de Bob em sua PATH
variável.
Existe uma maneira de anexar ao sistema PATH
sem 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
,currentValue
ec
são nomes de variáveis. Você pode escolher quaisquer nomes de variáveis que desejar, com as restrições de que thea
e thec
devem ser letras únicas, separadas por duas letras (por exemplo, você pode usarn
andp
, oux
andz
).-
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
%a
command2
tokens=1,2*
significa que%a
obtém o primeiro token (palavra) de cada linha (restante),%b
obtém a segunda palavra e%c
obté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ãocurrentValue=%b
.)- A primeira palavra é
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
.BAT
arquivo), use%%a
e%%c
. - Certifique-se de testar isso com
echo
comandos antes de fazer isso comsetx
.
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 set
comando 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\Environment
e 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.