Le variabili d'ambiente in Windows XP

Pubblicato il 19/9/2006 15:10:00 | Sezione Software Windows

Variabili d'ambiente in Windows XP



Con quest'articolo vogliamo fare una breve panoramica dell'utilizzo delle variabili d'ambiente ( environment variables in inglese ) in un sistema Windows XP. Innanzitutto cerchiamo di focalizzare più precisamente il contesto. Cosa sono le variabili d'ambiente?
Si tratta essenzialmente di alcune variabili che il sistema operativo rende disponibili ai processi che vengono eseguiti in modo da fornire informazioni di base relative appunto al sistema in uso sia per quanto riguarda l'hardware, sia per quanto riguarda il sistema operativo.

In Windows XP ci sono 2 diversi livelli per le variabili d'ambiente:

  • Variabili d'ambiente di sistema: sono modificabili solo dagli utenti amministratori e vengono applicate a tutti gli utenti del PC. Il cambiamento di una variabile di questa categoria richiede tipicamente il riavvio del sistema per diventare effettivo
  • Variabili d'ambiente di utente: ogni utente ha un proprio set di variabili d'ambiente seperato da quello degli altri utenti. L'utente può modificare e aggiungere nuove variabili d'ambiente in questa categoria e i cambiamenti non richiedono usualmente il riavvio del sistema per diventare effettivi anche se è possibile che sia necessario riavviare i programmi aperti per forzare una rilettura dei valori nelle variabili.


Il sistema operativo Windows XP è dotato di molte variabili d'ambiente predefinite che possono essere utilizzate dai programmi per carpire informazioni di base sul sistema ma che possono anche tornare utili ai normali utenti per alcune utili operazioni.
Vediamo prima una lista delle variabili disponibili ( in ordine alfabetico ):

Lista variabili d'ambiente predefnite

Variabile

Tipo

Descrizione

%ALLUSERSPROFILE%

Utente

Posizione del profilo All Users

%APPDATA%

Utente

Posizione dove le applicazioni memorizzano i dati di default

%CD%

Utente

Directory corrente di lavoro

%CMDCMDLINE%

Utente

La stringa completa utilizzata per eseguire la copia corrente di Cmd.exe

%CMDEXTVERSION%

Sistema

Numero di versione del processore di comandi corrente

%COMPUTERNAME%

Sistema

Nome del compute

%COMSPEC%

Sistema

Percorso alla shell dei comandi

%DATE%

Sistema

Data corrente nel formato utilizzato dal comando data /t

%ERRORLEVEL%

Sistema

Codice di errore dell'ultimo comando eseguito. Un valore nullo equivale tipicamente a nessun errore

%HOMEDRIVE%

Sistema

Lettera del drive connesso alla directory home dell'utente. Viene impostato in base al percorso della directory home

%HOMEPATH%

Sistema

Locazione della directory home dell'utente

%HOMESHARE%

Sistema

Percorso di rete alla directory home condivisa dell'utente.

%LOGONSEVER%

Utente

Nome del controllor di dominio che ha autorizzato la sessione corrente di logon

%NUMBER_OF_PROCESSORS%

Sistema

Numero di processori del sistema

%OS%

Sistema

Nome del sistema operativo. Per Windows XP per esempio la variabile prende il valore “Windows_NT”

%PATH%

Sistema

Specifica il percorso di ricerca per gli eseguibili

%PATHEXT%

Sistema

Lista delle estensioni che il sistema operativo considera come file eseguibili

%PROCESSOR_ARCHITECTURE%

Sistema

Architettura della CPU o delle CPU installate nel computer

%PROCESSOR_IDENTIFIER%

Sistema

Descrizione della CPU

%PROCESSOR_LEVEL%

Sistema

Numero di modello della CPU installata nel computer

%PROCESSOR_REVISION%

Sistema

Numero di revisione della CPU

%PROGRAMFILES%

Sistema

Cartella di installazione di default dei programmi

%PROMPT%

Utente

Stringa del prompt dei comandi dell'interprete corrente.

%RANDOM%

Sistema

Numero decimale casuale tra 0 e 32767

%SYSTEMDRIVE%

Sistema

Lettera di unità del drive che contiene la directory principale di Windows XP

%SYSTEMROOT%

Sistema

Percorso completo alla directory principale di Windows XP

%TEMP% e %TMP%

Sistema e Utente

Directory dove i programmi memorizzano dati temporanei disponibili per l'utente correntemente loggato

%TIME%

Sistema

Ora corrente nello stesso formato utilizzato dal comando time /t

%USERDOMAIN%

Utente

Dominio del quale fa parte l'utente corrente

%USERNAME%

Utente

Nome dell'utente correntemente loggato

%USERPROFILE%

Utente

Percorso completo del profilo dell'utente corrente

%WINDIR%

Sistema

Percorso alla directory del sistema operativo



Come potete vedere abbiamo scritto tutti i nomi delle variabili indicandoli tra due simboli di percentuale ( % ). Questo perchè quando utilizzate una variabile d'ambiente in una shell oppure all'interno di uno script batch dovete utilizzare appunto questa notazione per far si che l'interprete dei comandi sostituisca il nome della variabile con il valore effettivamente contenuto in essa. Facciamo un semplice esempio utilizzando il comando echo che non fa altro che stampare su schermo:



Come vedete nel primo caso abbiamo scritto WINDIR senza i segni di percentuale ed è stata stampata appunto la stringa WINDIR mentre nel secondo caso abbiamo scritto %WINDIR% che ha prodotto come risultato il valore della variabile che contiene la directory del sistema operativo. Nel terzo e ultimo caso abbiamo voluto dimostrare come i nomi delle variabili non siano case sensitive.

Queste variabili d'ambiente sono molto utili per i programmi i gli script. Per esempio possono utilizzare la variabile %TEMP% per avere il percorso nel quale memorizzare i dati temporanei oppure %PROGRAMFILES% per definire il percorso dove installare un certo applicativo.

Dopo questa breve panoramica vediamo come possiamo fare per visualizzare e modificare il valore di una variabile d'ambiente o di come possiamo crearne di nuove.




Il comando SET

Il prompt dei comandi di Windows XP mette a disposizione il programma SET che consente di visualizzare il nome e il contenuto delle variabili d'ambiente relative alla shell correntemente attiva e di creare o modificare il contenuto di queste variabili. Bisogna ricordare che però ogni modifica effettuata alle variabili non viene resa effettiva nel sistema ma rimane locale all'istanza dell'interprete dei comandi che è attiva in un dato momento. Per cui una volta terminata l'istanza dell'interprete dei comandi ogni modifica verrà automaticamente persa.

Vediamo un esempio di uso del comando SET:



Nella prima parte dell'esempio abbiamo utilizzato semplicemente il comando

set


senza alcun parametro e questo ha prodotto la stampa di tutti i nomi delle variabili d'ambiente attive nell'istanza corrente di CMD e con valore diverso da quello della stringa vuota. Il secondo esempio invece usa il comando

set ProgramFiles


che produce in output il valore della variabile ProgramFiles. Come terzo e ultimo esempio abbiamo voluto far vedere come sia possibile visualizzare il valore di più variabili il cui nome inizia con una particolare stringa, nel nostro caso Processor ( vediamo come il comportamento sia sempre case-insensitive ).

Vediamo ora come sia possibile utilizzare SET per creare o modificare, solo nell'istanza corrente dell'interprete dei comandi, le variabili d'ambiente:



Abbiamo utilizzato il comando set per creare una variabile dall'originalissimo nome di “variabile” impostandone il valore a 0 e successivamente un'altra variabile con il nome “variabileconspazio “ ( terminato appunto con uno spazio ). Notiamo che quando andiamo a visualizzare il contenuto delle due variabili lo spazio finale viene interpretato come facente parte del nome della variabile per cui ricordate di non lasciare spazi tra il nome e il simbolo di uguale




Modificare permanentemente il valore delle variabili

Usare SET va bene se siete all'interno di uno script Batch o se volete fare alcune operazioni veloci utilizzando CMD ma come possiamo modificare o creare variabili d'ambiente il cui valore rimanga? Per questo ci viene in aiuto un comodo strumento accessibile da interfaccia grafica.

Clicchiamo con il tasto destro su Risorse del Computer e successivamente su Proprietà. Andate nella scheda Avanzate e cliccate sul pulsante in basso Variabili d'ambiente indicato anche da questa immagine:



A questo punto avrete davanti a voi una finestra simile a questa:



Nel nostro caso l'utente Angaran Stefano fa parte del gruppo Administrators per cui può modificare il valore delle variabili di sistema.
Facciamo un esempio creando una variabile d'ambiente utente dal nome SAVEDIR. Clicchiamo sul pulsante Nuovo della sezione Variabili dell'utente e inseriamo i valori nella finestrella che comparirà:



Una volta completati i campi e cliccato su OK vedremo la nostra nuova variabile listata tra le altre:



Nel caso il vostro utente non faccia parte del gruppo Administrators i pulsanti Nuovo, Modifica ed Elimina della sezione in basso saranno disabilitati ma potrete comunque fare modifiche alle vostre variabili d'utente.

Ci sono dei limiti sulla quantità di spazio che ogni variabile può occupare, nome compreso, che è di 8192 bytes mentre il limite totale di tutte le variabili d'ambiente è di 65536 KB.

Ora che abbiamo visto come possiamo modificare le variabili d'ambiente vediamo dove vengono memorizzate. In Windows XP le variabili d'ambiente sono contenute all'interno del registro di configurazione in due locazioni separate a seconda che siano di sistema o di utente. Quelle dell'utente correntemente loggato si trovano in

HKEY_CURRENT_USER\Environment

e

HKEY_CURRENT_USER\Volatile Environment



mentre quelle di sistema si trovano nella sezione

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment



Siccome anche il registro è modificabile questo significa che possiamo creare o modificare variabili d'ambiente anche con regedit ricordando che se non facciamo parte del gruppo Administrators non potremmo effettuare modifiche alle variabili di sistema neanche in questo modo.

Vediamo come fare per creare una nuova variabile d'ambiente usando regedit, l'editor del registro di configurazione di Windows. Innanzitutto lanciamo il programma scrivendo

regedit

nel box Esegui ( tasto Windows + R per farlo apparire ).

Raggiungiamo con il navigatore a sinistra la sezione delle variabili d'utente e proviamo a crearne una nuova.

Facciamo click con il tasto destro in un'area libera della parte destra della finestra, selezioniamo Nuovo e successivamente Valore stringa ( oppure Valore stringa espandibile se vogliamo utilizzare altre variabili d'ambiente come parte del valore della nuova variabile ).



Comparirà una nuova voce nella lista e sarà possibile rinominarla per dare il nome alla variabile d'ambiente e successivamente modificarne il valore.



Esiste un ulteriore metodo per creare delle variabili d'ambiente di sistema che consiste nell'editare il file Autoexec.bat, vecchio residuo dei sistemi operativi DOS che ora non viene praticamente utilizzato ma che Windows XP ancora scansiona alla ricerca della definizione di variabili d'ambiente. É comunque sconsigliato l'uso di questo tipo di soluzione sia perchè la stessa Microsoft l'ha dichiarata ormai deprecata, sia perchè eventuali cambiamenti apportati al file richiedono il riavvio del sistema per diventare effettivi.




Le variabili PATH e PATHEXT

Vediamo ora un esempio di come possiamo realmente utilizzare le variabili d'ambiente per qualcosa a noi utile. Nella pagina precedente abbiamo lanciato regedit semplicemente scrivendo regedit nel box Esegui. Ora cerchiamo di individuare dove è collocata il programma regedit nel sistema. Si trova nel percorso

C:\WINDOWS\regedit.exe

Come mai non abbiamo dovuto immettere l'intero percorso al file per eseguirlo? Questo è dovuto alla combinazione delle due variabili di sistema PATH e PATHEXT. La prima, come abbiamo riportato nella tabella, rappresenta una lista di percorsi. Quando digitiamo un comando nel box Esegui oppure da un prompt dei comandi Windows cerca tale comando nelle cartelle indicate dalla variabile PATH. Vediamo per esempio cosa contiene la variabile PATH del nostro sistema:

Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programmi\File comuni\Adobe\AGL;C:\Programmi\Microsoft SQL Server\90\Tools\binn\

In questo caso una volta inserito il comando regedit.exe Windows cerca dapprima nella cartella C:\Windows\system32 e poi in C:\Windows dove effettivamente troverà il programma. Se non fosse stata presente C:\Windows in PATH, Windows avrebbe comunicato un messaggio di errore indicando che non esisteva il comando regedit.exe

La variabile PATHEXT ci semplifica ulteriormente la vita consentendoci di risparmiarci di indicare l'estensione dei file. Infatti in questa variabile possiamo inserire una lista delle estensioni che Windows deve interpretare come appartenenti a comandi eseguibili. Nel nostro esempio abbiamo:

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

Ogni estensione, come ogni percorso nella variabile PATH, è separata dal carattere “;” ( punto e virgola ).

Se ora noi volessimo poter lanciare un programma direttamente da linea di comando o dal box Esegui potremmo aggiungere il suo percorso alla variabile PATH, temporaneamente oppure permanentemente. Per esempio vogliamo poter lanciare velocemente il programma “mioprogramma.exe” contenuto nella cartella C:\Programmi\Miei

Sarà sufficiente modificare il nostro PATH in:

Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programmi\File comuni\Adobe\AGL;C:\Programmi\Microsoft SQL Server\90\Tools\binn\;C:\Programmi\Miei

e il gioco è fatto. Ricordate di separare i vari percorsi con il punto e virgola e di non terminarli con una “\”.

Ovviamente possiamo anche utilizzare il comando SET per modificare temporaneamente il valore di PATH per esempio dando:

set PATH=%PATH%;altro_percorso


in modo da concatenare il vecchio valore di PATH con il nuovo percorso.

Altro materiale

Se modificare le variabili di sistema tramite la finestra grafica o tramite il registro non vi basta potete utilizzare lo strumento setx.exe contenuto nei Support Tools di Windows XP SP2.
Per maggiori dettagli relativi a questo comando potete visualizzare il messaggio di aiuto relativo dando:

setx /?




Questo articolo viene da UpYou
http://www.upyou.it

L'indirizzo di questo articolo è:
http://www.upyou.it/modules/sections/articles.php?artid=29