Como faço para manter cada entrada do PATH apenas uma vez?

2

Acabei de tentar adicionar algo ao meu PATH e percebi que ele cresceu fora das proporções devido a duplicatas:

C:\Users\user>setx Path "%Path%;C:\Python34"
WARNING: The data being saved is truncated to 1024 characters.
SUCCESS: Specified value was saved.

Quando imprimi o valor de PATH , percebi que ele estava cheio de entradas duplicadas ( C:\Program Files-Zip chegou em 3 vezes), então não há lugar para novos dados. Existe uma maneira de se livrar das duplicatas sem edição manual e, de preferência, sem instalar software de terceiros? Qualquer conselho sobre como evitar PATH de duplicados é bem-vindo.

Eu já encontrei uma solução , mas ainda assim parece sub-ótimo ter duplicatas em PATH .

    
por Dmitry Grigoryev 29.06.2017 / 11:27

1 resposta

2

Existe uma maneira de se livrar das duplicatas sem edição manual?

Preferably without installing third-party software?

Se você não se importar em usar um script do PowerShell, poderá remover duplicatas usando o seguinte script do Microsoft Script Center :

Script to check for duplicate paths in PATH environment variable

Sometimes repeated installation of software can add duplicate entries into the PATH environment variable. Since environment variable has a there is a hard coded limit in the size of this variable, there are chances that you may it that limit over a period of time. This script checks the PATH environment variable and removes any duplicate path entries.

$RegKey = ([Microsoft.Win32.Registry]::LocalMachine).OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\Environment", $True) 
$PathValue = $RegKey.GetValue("Path", $Null, "DoNotExpandEnvironmentNames") 
Write-host "Original path :" + $PathValue  
$PathValues = $PathValue.Split(";", [System.StringSplitOptions]::RemoveEmptyEntries) 
$IsDuplicate = $False 
$NewValues = @() 

ForEach ($Value in $PathValues) 
{ 
    if ($NewValues -notcontains $Value) 
    { 
        $NewValues += $Value 
    } 
    else 
    { 
        $IsDuplicate = $True 
    } 
} 

if ($IsDuplicate) 
{ 
    $NewValue = $NewValues -join ";" 
    $RegKey.SetValue("Path", $NewValue, [Microsoft.Win32.RegistryValueKind]::ExpandString) 
    Write-Host "Duplicate PATH entry found and new PATH built removing all duplicates. New Path :" + $NewValue 
} 
else 
{ 
    Write-Host "No Duplicate PATH entries found. The PATH will remain the same." 
} 

$RegKey.Close() 

Fonte Como verificar se há caminhos duplicados na variável de ambiente PATH

    
por 29.06.2017 / 12:38