Tout ce que vous devez savoir pour afficher, créer, modifier et gérer les variables d'environnement système et utilisateur — de l'interface graphique à PowerShell.
Les variables d'environnement sont des paires clé-valeur nommées que le système d'exploitation stocke pour conserver des informations de configuration utilisées par les programmes, les scripts et l'interpréteur de commandes lui-même. Imaginez-les comme un registre de paramètres global que tout processus en cours d'exécution peut consulter — sans avoir à coder en dur des chemins ou des valeurs directement dans le code.
Par exemple, la célèbre variable PATH indique à Windows où chercher lorsque vous tapez une commande dans l'Invite de commandes. Au lieu de taper C:\Windows\System32\notepad.exe à chaque fois, vous tapez simplement notepad — car C:\Windows\System32 est déjà référencé dans PATH.
Les variables d'environnement font partie intégrante de Windows depuis NT 3.1, et leur comportement est pratiquement identique dans Windows 10 et Windows 11. Les boîtes de dialogue de l'interface graphique diffèrent légèrement en raison du rafraîchissement visuel de Windows 11, mais les emplacements dans le registre, les règles d'héritage et les outils en ligne de commande fonctionnent exactement de la même façon.
Les développeurs, les administrateurs système et les utilisateurs avancés s'appuient sur les variables d'environnement pour une large gamme de tâches : stocker des données sensibles comme des clés API en dehors du code source, configurer le comportement d'exécution des applications sans recompilation, créer des scripts portables fonctionnant sur n'importe quelle machine, et définir les chemins d'installation d'outils tels que Python, Java, Node.js et Git.
Windows reconnaît quatre portées distinctes pour les variables d'environnement. Comprendre la portée est essentiel, car une variable définie à un niveau peut remplacer, être remplacée par, ou simplement être invisible depuis un autre niveau.
Définies par compte utilisateur. Stockées dans HKCU\Environment dans le registre. Disponibles uniquement pour les processus exécutés sous ce compte. Prioritaires sur les variables Machine portant le même nom (sauf PATH).
S'appliquent à tous les utilisateurs de la machine. Stockées dans HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Des droits Administrateur sont requis pour les modifier.
N'existent que pendant la durée d'un seul processus et de ses enfants. Définies via set dans CMD ou $env: dans PowerShell. Les modifications sont supprimées à la fin du processus.
Sous-ensemble spécial stocké dans HKCU\Volatile Environment. Recréées à chaque ouverture de session (ex. : SESSIONNAME, LOGONSERVER). Perdues à la fermeture de session et non modifiables par l'utilisateur.
Pour la plupart des variables, les variables utilisateur sont prioritaires sur les variables système lorsque les deux existent avec le même nom. La principale exception est PATH : Windows concatène le PATH système et le PATH utilisateur (le système en premier, puis l'utilisateur), de sorte que les deux contribuent à la valeur finale vue par tout processus en cours d'exécution.
Il existe plusieurs façons d'ouvrir la boîte de dialogue Variables d'environnement. Voici les méthodes les plus fiables, toutes compatibles avec Windows 10 et Windows 11 :
Win + R, tapez sysdm.cpl et appuyez sur Entrée.Win + S pour ouvrir la Recherche.Win + R pour ouvrir la boîte de dialogue Exécuter.rundll32 sysdm.cpl,EditEnvironmentVariables et appuyez sur Entrée.rundll32 sysdm.cpl,EditEnvironmentVariables comme raccourci sur le bureau si vous modifiez souvent les variables d'environnement. C'est l'accès le plus rapide en un seul clic sur tout système Windows 10/11.
La ligne de commande vous offre un accès rapide et scriptable aux valeurs des variables d'environnement sans ouvrir de boîte de dialogue graphique.
CMD — lister toutes les variablesset
CMD — afficher une variable préciseecho %VARIABLE_NAME%
echo %PATH%
echo %USERNAME%
CMD — filtrer les variables par préfixeset APP_
Taper set sans argument affiche toutes les variables d'environnement disponibles dans le processus courant. Taper set PREFIXE (sans signe égal) liste toutes les variables dont le nom commence par ce préfixe — très utile pour vérifier rapidement toutes les variables liées à JAVA_ ou à PYTHON.
PowerShell — lister toutes les variablesGet-ChildItem Env:
PowerShell — lire une variable précise$env:PATH
$env:USERNAME
$env:APPDATA
PowerShell — filtrer et mettre en formeGet-ChildItem Env: | Where-Object { $_.Name -like "APP_*" }
Get-ChildItem Env: | Sort-Object Name | Format-Table -AutoSize
PowerShell — lire une variable utilisateur persistante depuis le registre[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "User")
[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "Machine")
MY_APP_ROOT) et la Valeur de la variable (ex. : C:\MyApp).CMD — définir une variable pour la session en coursset MY_VARIABLE=Bonjour
set APP_ENV=production
CMD — supprimer une variable de la session en coursset MY_VARIABLE=
CMD — créer une variable utilisateur persistantesetx MY_VARIABLE "Bonjour"
CMD — créer une variable système persistante (nécessite Admin)setx MY_VARIABLE "Bonjour" /M
setx écrit dans le registre et affecte les processus futurs, mais ne met pas à jour l'environnement de la session CMD en cours. Vous devez ouvrir une nouvelle fenêtre CMD pour voir la nouvelle valeur. De plus, setx tronque silencieusement les valeurs dépassant 1 024 caractères — un piège fréquent lors de l'ajout d'entrées à PATH.
La variable PATH est de loin la variable d'environnement la plus importante et la plus fréquemment modifiée. Il s'agit d'une liste de répertoires séparés par des points-virgules que Windows parcourt dans l'ordre lorsque vous exécutez un programme sans préciser son chemin complet.
Windows 10 et 11 intègrent un éditeur PATH dédié qui affiche chaque entrée sur sa propre ligne, ce qui facilite grandement la gestion par rapport à l'édition manuelle de la chaîne brute séparée par des points-virgules.
Path dans la section utilisateur ou système.PowerShell — ajouter au PATH utilisateur de façon permanente$current = [System.Environment]::GetEnvironmentVariable("Path", "User")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "User")
PowerShell — ajouter au PATH système (exécuter en tant qu'Administrateur)$current = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "Machine")
La classe .NET [System.Environment] de PowerShell et le fournisseur Env: vous offrent un contrôle total et scriptable sur toutes les portées des variables d'environnement.
PowerShell — définir une variable utilisateur persistante[System.Environment]::SetEnvironmentVariable("API_KEY", "abc123xyz", "User")
PowerShell — définir une variable système persistante (Admin requis)[System.Environment]::SetEnvironmentVariable("DB_HOST", "prod-db-01", "Machine")
PowerShell — supprimer une variable utilisateur[System.Environment]::SetEnvironmentVariable("API_KEY", $null, "User")
PowerShell — définir une variable pour la session en cours uniquement$env:MY_TEMP_VAR = "valeur_temporaire"
Remove-Item Env:MY_TEMP_VAR
PowerShell — exporter toutes les variables utilisateur dans un fichierGet-ChildItem Env: | Export-Csv -Path "$HOME\env_backup.csv" -NoTypeInformation
PowerShell — importer des variables depuis un fichier .env (pattern courant)Get-Content ".env" | ForEach-Object {
if ($_ -match "^([^#=]+)=(.*)$") {
[System.Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), "User")
}
}
WM_SETTINGCHANGE afin que l'Explorateur et les nouvelles fenêtres de terminal prennent en compte les modifications sans déconnexion. Cette technique est utilisée par de nombreux installeurs, comme Chocolatey et Scoop.
Windows est livré avec un ensemble riche de variables d'environnement prédéfinies. Les connaître fait gagner du temps et rend les scripts portables entre différentes machines et différents utilisateurs.
| Variable | Valeur typique | Description |
|---|---|---|
%USERNAME% |
jean.dupont |
Nom du compte de l'utilisateur actuellement connecté. |
%USERPROFILE% |
C:\Users\jean.dupont |
Chemin complet vers le dossier personnel de l'utilisateur actuel. |
%APPDATA% |
C:\Users\jean.dupont\AppData\Roaming |
Dossier de données d'application itinérantes de l'utilisateur actuel. |
%LOCALAPPDATA% |
C:\Users\jean.dupont\AppData\Local |
Dossier de données d'application locales (non itinérantes). |
%TEMP% / %TMP% |
C:\Users\jean.dupont\AppData\Local\Temp |
Répertoire des fichiers temporaires. Peut être vidé périodiquement sans risque. |
%SYSTEMROOT% |
C:\Windows |
Répertoire racine de l'installation de Windows. |
%SYSTEMDRIVE% |
C: |
Lettre de lecteur du disque système. |
%WINDIR% |
C:\Windows |
Alias de %SYSTEMROOT%. Utilisé par les applications plus anciennes. |
%PROGRAMFILES% |
C:\Program Files |
Dossier d'installation par défaut pour les programmes 64 bits. |
%PROGRAMFILES(X86)% |
C:\Program Files (x86) |
Dossier d'installation par défaut pour les programmes 32 bits sur Windows 64 bits. |
%COMPUTERNAME% |
DESKTOP-ABC123 |
Nom NetBIOS de la machine. |
%OS% |
Windows_NT |
Toujours Windows_NT sous Windows moderne. Utilisé dans les anciens scripts batch pour détecter le système d'exploitation. |
%PROCESSOR_ARCHITECTURE% |
AMD64 |
Architecture CPU du processus actuel (AMD64, x86, ARM64). |
%PATH% |
(liste combinée) | Liste de répertoires séparés par des points-virgules, utilisée pour rechercher les exécutables. |
%PATHEXT% |
.COM;.EXE;.BAT;… |
Extensions de fichiers que Windows considère comme exécutables lors de la recherche dans PATH. |
%PUBLIC% |
C:\Users\Public |
Dossier public partagé accessible par tous les utilisateurs de la machine. |
Vous pouvez utiliser n'importe laquelle de ces variables dans la barre d'adresse de l'Explorateur de fichiers, dans la boîte de dialogue Exécuter (Win+R), dans les scripts batch et dans PowerShell en les entourant de signes pourcentage (%VARIABLE%) ou avec la syntaxe $env:VARIABLE.
Les modifications ne prennent pas effet dans les applications ouvertes. Les changements de variables d'environnement ne sont lus qu'au démarrage d'un processus. Vous devez fermer et rouvrir l'application, le terminal ou l'IDE. Se déconnecter puis se reconnecter garantit que tous les processus reçoivent les valeurs mises à jour.
Commande introuvable après ajout au PATH. Vérifiez d'abord que le chemin a bien été ajouté avec echo %PATH% dans une nouvelle fenêtre CMD. Recherchez les fautes de frappe, les barres obliques inverses manquantes ou les espaces superflus. Assurez-vous d'avoir modifié la bonne portée (utilisateur ou système).
PATH semble tronqué — des entrées sont manquantes. Cela est dû à la limite de 1 024 caractères de l'ancienne commande setx ou d'outils de registre hérités. Utilisez l'éditeur PATH graphique ou la méthode [System.Environment] de PowerShell, qui prend en charge des chemins jusqu'à 32 767 caractères (la limite du registre Windows).
Les variables système ne sont pas visibles pour l'utilisateur actuel. Vérifiez les deux sections — utilisateur et système — dans la boîte de dialogue des variables d'environnement, ou utilisez set dans CMD, qui affiche le résultat combiné. Si une variable système n'apparaît toujours pas, vérifiez la stratégie de groupe — elle peut remplacer ou masquer des variables.
Une application ignore la variable d'environnement. Certaines applications mettent en cache les variables d'environnement au démarrage et ne les relis pas pendant leur exécution. Redémarrez l'application. Certaines requièrent également que la variable soit définie avant le démarrage du service qui les lance — dans ce cas, un redémarrage du système peut être nécessaire.
set > "%USERPROFILE%\Desktop\env_backup.txt" dans CMD. Cela vous fournit une référence pour restaurer en cas de problème.
PATH, dont la valeur est concaténée à partir des deux. Si vous êtes le seul utilisateur et disposez des droits administrateur, la différence pratique est minime ; pour les machines partagées ou les environnements contrôlés, les variables système sont le bon choix pour les paramètres à l'échelle de la machine.
Path dans les variables utilisateur, cliquez sur Modifier, puis sur Nouveau et collez le répertoire (par ex. C:\Python312 et C:\Python312\Scripts pour Python, ou C:\Program Files\nodejs pour Node.js). Ouvrez une nouvelle fenêtre CMD et tapez python --version ou node --version pour confirmer.
C:\Program Files\...). Lorsque vous référencez une telle variable dans CMD, entourez l'expansion de guillemets : "%MON_CHEMIN%". Les noms de variables doivent être alphanumériques avec des underscores — évitez les espaces et les caractères spéciaux dans les noms. N'incluez pas de guillemets littéraux dans la valeur d'une variable via l'interface graphique ; ils seront stockés tels quels et peuvent provoquer des comportements inattendus lorsque les scripts développent la variable.
%PATH%, %path% et %Path% font tous référence à la même variable. C'est différent de Linux/macOS, où PATH et path seraient deux variables distinctes. Par convention, les noms de variables d'environnement Windows s'écrivent en MAJUSCULES, mais c'est purement stylistique.
MONAPP_API_KEY. Sachez que les variables d'environnement sont stockées en texte clair dans le registre Windows — elles ne sont pas chiffrées. Tout processus s'exécutant sous votre compte utilisateur peut les lire. Pour plus de sécurité, envisagez le Gestionnaire d'informations d'identification Windows, Azure Key Vault, ou des outils comme direnv combinés à des fichiers .env exclus du contrôle de version. Ne committez jamais dans des dépôts de code source des variables d'environnement contenant des secrets.
REG_EXPAND_SZ (le type utilisé pour les variables d'environnement extensibles comme PATH). Cependant, la commande héritée setx tronque silencieusement les valeurs dépassant 1 024 caractères — une limitation connue. Pour gérer en toute sécurité des valeurs longues (en particulier PATH), utilisez toujours l'éditeur graphique ou [System.Environment]::SetEnvironmentVariable() dans PowerShell, qui communiquent directement avec le registre sans cette restriction.
Les variables d'environnement constituent un pilier fondamental de la configuration Windows — les maîtriser vous rend nettement plus productif en tant que développeur, administrateur système ou utilisateur avancé. Utilisez l'éditeur graphique pour une gestion visuelle et sécurisée du PATH ; utilisez l'API [System.Environment] de PowerShell pour une automatisation avec contrôle de portée sans limite de caractères ; et utilisez set/$env: pour les valeurs temporaires de session qui ne polluent pas le registre système.
Que vous soyez sur Windows 10 ou Windows 11, les mécanismes sous-jacents sont identiques — seule l'apparence visuelle diffère. Une fois que vous comprenez la portée utilisateur versus système, le comportement de concaténation de PATH et le fonctionnement de l'héritage de processus, vous rencontrerez rarement des problèmes que vous ne pourrez pas diagnostiquer et résoudre en quelques minutes.