# Variabile d'ambiente (Windows)

Le variabili d'ambiente, nei sistemi operativi Microsoft Windows, sono un tipo di variabili specifiche per processo.
Con l'evolversi dei sistemi, l'uso delle variabili d'ambiente come strumento di configurazione è andato via via riducendosi al minimo, dato che questa funzione è affidata al registro di sistema.

## Ambiente di riferimento

Nei sistemi Microsoft Windows NT (quindi anche Windows 2000, Windows XP e successivi) è presente un ambiente di riferimento che la shell grafica usa per inizializzare le variabili d'ambiente dei nuovi processi che avvia, e che può essere modificato sia dai processi in generale che tramite un'apposita interfaccia grafica. Esso è strutturato in tre livelli:
* il livello delle variabili d'ambiente di sistema, alcune delle quali sono nascoste e/o di uso riservato al sistema; soltanto gli amministratori del sistema possono aggiungere o modificare variabili d'ambiente di questo tipo;
* il livello delle variabili d'ambiente utente; esse sono specifiche per il particolare utente, che può liberamente assegnare valori e creare nuove variabili. Una variabile d'ambiente utente maschera una variabile d'ambiente di sistema che abbia lo stesso nome, con l'eccezione della variabile PATH, che invece viene concatenata a quella di sistema;
* il livello delle variabili d'ambiente assegnate in autoexec.bat, che esistono solamente per preservare la compatibilità con alcuni programmi MS-DOS.
Le variabili d'ambiente di sistema e le variabili d'ambiente utente possono essere modificate a caldo, senza richiedere un riavvio del sistema: i nuovi processi hanno visibilità immediata delle modifiche, mentre i processi preesistenti debbono essere riavviati per far prendere in considerazione i nuovi valori.
Le variabili d'ambiente assegnate in autoexec.bat sono assegnate in maniera stabile all'avvio del sistema e non possono essere modificate a caldo, tuttavia è possibile mascherarne i valori con delle variabili d'ambiente utente aventi lo stesso nome.
Ogni programma che avvia altri programmi ha la possibilità e l'onere di consultare l'ambiente di riferimento in modo da provvedere un insieme adeguato di variabili d'ambiente ai programmi avviati, oppure può limitarsi a passare una copia delle proprie variabili d'ambiente (in maniera non dissimile da quanto avviene per i sistemi Unix e Unix-like), confidando che l'ambiente di riferimento non sia stato nel frattempo modificato.

## Caratteristiche

Posseggono le seguenti caratteristiche:
* sono accessibili attraverso un'apposita API del sistema operativo;
* in fase di creazione di un nuovo processo, sono inizializzate con una copia dei valori provvisti dal processo padre; il comportamento predefinito è quello di usare una copia delle variabili d'ambiente del processo creante;
* un processo non può modificare direttamente le variabili d'ambiente di un altro processo, tuttavia esiste un ambiente di riferimento che i processi possono consultare e modificare, e che viene usato dalla shell grafica per inizializzare le variabili d'ambiente dei programmi che avvia

## Vincoli su nomi e valori

Nei sistemi Microsoft Windows e MS-DOS non viene fatta distinzione tra lettere maiuscole e minuscole nei nomi delle variabili d'ambiente, per cui "PATH" equivale a "Path" e "path"; è tuttavia comune specificare i nomi esclusivamente con lettere maiuscole, ed usare solo lettere (e non ad esempio cifre).
Per il modo in cui sono memorizzate, i nomi delle variabili d'ambiente non possono contenere il carattere uguale ("=") , ed i valori possono essere stringhe di caratteri ANSI (oppure Unicode) terminate da un byte a zero (o due in caso di stringhe Unicode). Ne consegue che il nome ed il valore di una variabile d'ambiente non possono direttamente contenere dati binari.
I valori delle variabili d'ambiente di sistema non possono eccedere i 1024 caratteri.

## Utilizzo

Nell'interfaccia a riga di comando di tutti i sistemi Microsoft Windows e MS-DOS è possibile assegnare un valore ad una variabile d'ambiente tramite il comando set (sostituendo un eventuale valore assegnato in precedenza), ed utilizzarne il valore nelle righe di comando e nei file batch specificandone il nome tra caratteri "%". Ad esempio, in un file batch:
È anche possibile combinare le due cose, ad esempio per estendere il valore di una variabile d'ambiente includendo nel nuovo valore anche il valore precedente:
La visibilità delle variabili d'ambiente assegnate in questo modo è limitata allo specifico interprete dei comandi ed ai programmi da esso avviati. Per modificare anche l'ambiente di riferimento è possibile usare il comando setx

## Variabili di rilievo
### PATH

La variabile d'ambiente PATH specifica un elenco di directory separate da punto e virgola ";" in cui il sistema ricerca i file eseguibili (nell'ordine in cui sono indicate), oltre che nella directory corrente.
Essa è usata quando il nome del file eseguibile non è qualificato con il percorso della directory che lo contiene, sia per programmi che per librerie software.
È quindi pratica comune, in fase di installazione di un nuovo programma, estendere il valore di questa variabile d'ambiente in modo da includere anche la directory dove risiedono i file eseguibili del programma che è stato installato.
Essa costituisce un'eccezione alla regola per cui i valori delle variabili d'ambiente utente mascherano il valore di variabili d'ambiente di sistema con lo stesso nome: il valore utente in questo caso viene concatenato al valore di sistema invece di sostituirlo.

### PATHEXT

Questa variabile contiene un elenco separato da punto e virgola ";" delle estensioni che un nome di file deve avere per essere considerato eseguibile dal sistema. Un valore tipico è:

### TEMP e TMP

Queste variabili indicano il percorso completo a delle directory destinate a contenere dei file temporanei.