7 votes

Comment faire pour que chaque entrée PATH ne soit conservée qu'une seule fois ?

Je viens d'essayer d'ajouter quelque chose à mon PATH et j'ai réalisé qu'elle avait pris des proportions démesurées à cause des doublons :

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

Quand j'ai imprimé le PATH j'ai réalisé qu'elle était remplie d'entrées en double ( C:\Program Files\7-Zip est même entré 3 fois), donc il n'y a pas de place pour de nouvelles données. Existe-t-il un moyen de se débarrasser des doublons sans modification manuelle, et de préférence sans installer de logiciel tiers ? Tout conseil sur la façon d'éviter PATH les doublons sont également les bienvenus.

J'ai trouvé un solution de contournement déjà, mais il semble tout de même sous-optimal d'avoir des doublons en PATH .

4voto

DavidPostill Points 140654

Existe-t-il un moyen de se débarrasser des doublons sans modification manuelle ?

De préférence sans installer de logiciel tiers ?

Si l'utilisation d'un script PowerShell ne vous dérange pas, vous pouvez supprimer les doublons en utilisant le script suivant à partir de l'interface de l'utilisateur. Centre Microsoft script :

script pour vérifier les chemins en double dans la variable d'environnement PATH

Parfois, l'installation répétée d'un logiciel peut ajouter des entrées en double dans la variable d'environnement PATH. Comme la variable d'environnement a une il y a une limite codée en dur dans la taille de cette variable, il y a des chances que vous puissiez it cette limite sur une période de temps. Ce script vérifie la variable d'environnement PATH et supprime toute entrée de chemin en double.

$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() 

Source : Comment vérifier les chemins en double dans la variable d'environnement PATH ?

1voto

np8 Points 1140

Vous pouvez faire cela avec un paquet Python appelé pathtub (je suis l'auteur de ce paquet)

Installation

pip install pathtub

Utilisation

from pathtub import clean
# Default parameter values shown
clean(sort=True, remove_non_existent=True, remove_user_duplicates=True)

Que fait-il ?

  • Suppression des doublons et des entrées vides ( ;; ) de "User PATH" et "System PATH" (la barre oblique inversée de fin de ligne est négligée lors de la comparaison de deux dossiers). L'édition de "System PATH" nécessite que Python soit exécuté avec des droits d'administrateur.
  • Suppression du "PATH de l'utilisateur" des entrées qui se trouvent dans le "PATH du système" (facultatif, activé par défaut). Contrôlé par l'option remove_user_duplicates -paramètre.
  • Trie le(s) PATH(s) par ordre alphabétique (facultatif, activé par défaut). Contrôlé par l'option sort paramètre.
  • Supprime de PATH(s) les dossiers qui n'existent pas sur le système de fichiers (facultatif, activé par défaut). Contrôlé par l'option remove_non_existent -paramètre.

Pour une description plus détaillée, veuillez consulter le documentation dans GitHub.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X