Estou tentando definir variáveis de ambiente usando o setx
comando, como a seguir
setx PATH "f: \ ferramentas comuns \ git \ bin; f: \ ferramentas comuns \ python \ app; f: \ ferramentas comuns \ python \ app \ scripts; f: \ ferramentas comuns \ ruby \ bin; f: \ masm32 \ bin; F: \ Borland \ BCC55 \ Bin;% PATH% "
No entanto, recebo o seguinte erro se o valor tiver mais de 1024 caracteres:
AVISO: Os dados que estão sendo salvos são truncados para 1024 caracteres.
SUCESSO: o valor especificado foi salvo.
Mas alguns dos caminhos no final não são salvos em variável, acho que devido ao limite de caracteres, como o erro sugere.
windows-7
environment-variables
windows-server-2008-r2
Madhur Ahuja
fonte
fonte
%PATH%
Respostas:
Sua melhor aposta é editar o registro diretamente.
Navegue
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
e edite oPath
valor (depois reinicie para ativar o novo valor).Observe, porém, que embora você possa digitar um caminho muito longo (até o tamanho máximo da variável de ambiente; 2.048 ou 32.768 bytes, dependendo da fonte), nem todos os softwares poderão lê-lo e manipulá-lo corretamente se for muito longo.
fonte
setx
edita o registro como indicado, depois transmite umaWM_SETTINGCHANGE
mensagem. Isso informa a todas as janelas de nível superior que uma configuração do sistema foi alterada (neste caso, uma variável de ambiente). Sem isso, o Explorer e os programas que você abriu com ele não saberão sobre a alteração. Você pode transmitir a mensagem manualmente (eu escrevi um programa para fazer exatamente isso e um arquivo em lote para substituirSETX
que faz com que uma edição do registro seja seguida pela transmissão), mas assim comosetx
a caixa de diálogo envvar Propriedades do sistema, ela tem efeitos colaterais faça a reinicialização preferível.:-|
se você estiver usando o Windows Vista ou superior, poderá fazer um
symbolic link
para a pasta. por exemplo:criaria um link, assim
c:\pf
seria sua pasta de arquivos de programa. Raspei 300 caracteres do meu caminho usando esse truque.(Eu sei que não está relacionado ao setx, mas é útil para pessoas que estão pesquisando superando o limite de 1024 caracteres)
fonte
Você pode usar um script do PowerShell semelhante ao seguinte:
A chamada da API Environment.SetEnvironmentVariable () será transmitida
WM_SETTINGCHANGE
para que você não precise reinicializar.fonte
[Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')
?@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
Essa ferramenta de linha de comando SetEnv de código aberto é boa para editar o PATH e outras variáveis de ambiente sem limitações. Ele usa um buffer dinâmico, sem limitações estáticas como 1024.
http://www.codeproject.com/Articles/12153/SetEnv
A escolha de um% como prefixo para anexar a uma variável poderia ter sido melhor, pois dificulta a sintaxe às vezes se usada com outras variáveis locais em lote ...
fonte
Uma ferramenta muito superior à setx para manipulação de caminhos é pathed.exe . Infelizmente, é limitado a editar o caminho.
Além de uma experiência de usuário superior à setx, você não tem um limite de 1024 caracteres. Ao contrário da manipulação direta do registro, este aplicativo usa a chamada da API Environment.SetEnvironmentVariable () que será transmitida
WM_SETTINGCHANGE
.fonte
Minha maneira favorita é alterar os nomes das pastas nas variáveis PATH para usar os nomes 8.3. Essa resposta do StackOverflow possui um script impressionante (executado a partir de um arquivo .bat) que gera a versão "minificada" de toda a variável PATH, que você pode colar nas caixas de diálogo Editar variável. A única ressalva é que você precisará dividir as peças SYSTEM e USER. À medida que o script avança e descobre a versão reduzida para cada pasta, ele descarta e alerta você sobre quaisquer caminhos inválidos / inexistentes. Bom pequeno bônus de limpeza.
fonte
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
APÓS o uso do script definitivamente causaria problemas nas pastas afetadas.fsutil 8dot3name strip
anteriormente hoje e considerando que (a) verifica primeiro o registro e (b) o caminho é armazenado no registro, minha preocupação anterior pode ser injustificada, desde que o usuário não use a/f
opção (force) .Você pode colocar esta linha no seu BAT:
Veja o dobro
%%
.(Referência: https://support.microsoft.com/en-us/kb/75634 )
fonte
%path%;c:\...[snip]...\7z
napath
variável do usuário , descartando qualquer outra coisa que você tenha lá.%path%
a variável de ambiente do caminho local não deve ter efeito.se não for necessário manter o PATH do sistema e o PATH do usuário separados:
fonte
Acho que o melhor caminho é o próximo (com PowerShell). Dessa maneira, você evita o litmit de 1024 caracteres.
Você pode ver o código em: https://gist.github.com/drazul/b92f780689bd89a0d2a7
fonte