Visualizza, imposta o rimuove le variabili d'ambiente di cmd.exe.
SET [variabile=[stringa]]
variabile Specifica il nome della variabile d'ambiente.
stringa Specifica una serie di caratteri da assegnare alla variabile.
Digitare SET senza parametri per visualizzare le variabili d'ambiente correnti.
Se le estensioni dei comandi sono attivate, il comando SET verrà modificato come segue:
Se il comando SET viene richiamato specificando solo un nome di variabile, senza segno di uguale o valore, visualizzerà i valori di tutte le variabili con prefisso corrispondente al nome passato al comando SET. Ad esempio:
SET P
visualizza tutte le variabili che iniziano con la lettera 'P'.
Se il nome della variabile non viene trovato nell'ambiente corrente, ERRORLEVEL verrà impostato su 1.
Il comando SET non consente di includere il segno uguale (=) nei nomi delle variabili.
Al comando SET sono state aggiunte due nuove opzioni:
SET /A espressione
SET /P variabile=[StringaPrompt]
L'opzione /A indica che la stringa alla destra dell'uguale è un'espressione numerica da valutare. L'analizzatore di espressioni è piuttosto semplice e supporta le operazioni seguenti, in ordine di precedenza decrescente:
() - Raggruppamento
! ~ - - Operatori unari
* / % - Operatori aritmetici
+ - - Operatori aritmetici
<< >> - Shift logico
& - AND bit per bit
^ - OR esclusivo bit per bit
| - OR bit per bit
= *= /= %= += -= - Assegnazione
&= ^= |= <<= >>=
, - Separatore di espressione
Se si utilizzano operatori logici o di modulo, sarà necessario racchiudere tra virgolette la stringa dell'espressione. Le stringhe non numeriche presenti in un'espressione vengono gestite come nomi di variabili di ambiente, i cui valori vengono convertiti in numeri prima dell'utilizzo. Se è specificato il nome di una variabile di ambiente non definita nell'ambiente corrente, verrà utilizzato il valore zero. Questo consente di eseguire operazioni aritmetiche con le variabili di ambiente senza dover digitare i caratteri % necessari per ottenere i relativi valori. Se si esegue SET /A
dalla riga di comando al di fuori di uno script di comandi, verrà visualizzato il valore finale dell'espressione. Se si utilizza l'operatore di assegnazione, sarà necessario specificare il nome di una variabile di ambiente a sinistra dell'operatore. I valori numerici sono numeri decimali, a meno che non siano preceduti dal prefisso 0x, che indica i numeri esadecimali, o 0, per i numeri ottali. Il valore 0x12 corrisponde quindi al valore decimale 18 e al valore ottale 022. La notazione ottale può creare confusione: i valori 08 e 09 non sono numeri validi, perché 8 e 9 non sono cifre ottali valide.
L'opzione /P consente di impostare come valore per una variabile una riga di input immessa dall'utente. Prima di leggere la riga di input visualizza il valore di StringaPrompt specificato. Il parametro StringaPrompt può essere vuoto.
La sostituzione delle variabili di ambiente è stata migliorata come segue:
%PATH:str1=str2%
Espande la variabile di ambiente PATH, sostituendo con "str2" ogni occorrenza di "str1" trovata nel risultato dell'espansione. È possibile specificare la stringa vuota come valore del parametro "str2", per eliminare tutte le occorrenze di "str1" dall'output prodotto dall'espansione. Se il valore di "str1" inizia con un asterisco, identificherà tutti i caratteri dall'inizio dell'output dell'espansione alla prima occorrenza della restante parte di str1.
È inoltre possibile specificare una sottostringa del risultato dell'espansione.
%PATH:~10,5%
Espande la variabile di ambiente PATH, quindi utilizza solo 5 caratteri a partire dall'undicesimo (offset 10) carattere del risultato dell'espansione. Se la lunghezza non è specificata, per impostazione predefinita verrà
utilizzata tutta la parte rimanente del valore della variabile. Se uno dei valori (offset o lunghezza) è negativo, verrà utilizzato il valore ottenuto sommando la lunghezza della variabile di ambiente alla lunghezza o all'offset specificato.
%PATH:~-10%
Estrae gli ultimi 10 caratteri della variabile PATH.
%PATH:~0,-2%
Estrae tutti i caratteri della variabile PATH tranne gli ultimi 2.
È stato infine aggiunto il supporto per l'espansione ritardata delle variabili di ambiente. Tale supporto è disattivato per impostazione predefinita, ma può essere attivato e disattivato utilizzando l'opzione /V del comando CMD.EXE. Digitare CMD /? per ulteriori informazioni.
L'espansione ritardata delle variabili di ambiente consente di ovviare alle limitazioni dell'espansione immediata, che viene effettuata alla lettura di una riga di testo, ma non quando quest'ultima viene eseguita.
Il problema dell'espansione immediata è illustrato dall'esempio seguente:
set VAR=prima
if "%VAR%" == "prima" (
set VAR=dopo
if "%VAR%" == "dopo" @echo Se questo messaggio viene visualizzato,
il codice funziona
)
Questa istruzione non visualizza il messaggio perché, in ENTRAMBE le istruzioni IF, la variabile %VAR% viene sostituita alla lettura della prima istruzione IF, poiché include logicamente il corpo di IF, che è un'istruzione composta. L'istruzione IF all'interno dell'istruzione composta confronta pertanto i valori "prima" e "dopo", che non sono mai uguali. Anche l'esempio seguente non funziona come previsto:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
perché NON crea l'elenco dei file della directory corrente, ma imposta semplicemente la variabile LIST sull'ultimo file trovato. Come in precedenza, questo accade perché la variabile %LIST% viene espansa solo una volta alla lettura dell'istruzione FOR e, in quel momento, la variabile LIST è vuota.
Di fatto viene pertanto eseguito il ciclo FOR seguente:
for %i in (*) do set LIST= %i
che continua a impostare LIST sull'ultimo file trovato.
L'espansione ritardata delle variabili di ambiente consente di espandere le variabili di ambiente al momento dell'esecuzione, semplicemente utilizzando un carattere diverso (il punto esclamativo). Se l'espansione ritardata delle variabili di ambiente è attivata, gli esempi precedenti possono essere riscritti come segue, e funzioneranno correttamente:
set VAR=prima
if "%VAR%" == "prima" (
set VAR=dopo
if "!VAR!" == "dopo" @echo Se questo messaggio viene visualizzato, il
codice funziona
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Se le estensioni dei comandi sono attivate, molte variabili di ambiente dinamiche potranno essere espanse ma non saranno presenti nell'elenco delle variabili visualizzato da SET. I valori di tali variabili vengono calcolati dinamicamente ogni volta che le variabili vengono espanse. Se l'utente definisce esplicitamente una variabile con uno di questi nomi, tale definizione sostituirà quella dinamica descritta di seguito:
%CD% - Viene sostituita dalla stringa della directory corrente.
%DATE% - Viene sostituita dalla data corrente utilizzando lo stesso formato del comando DATE.
%TIME% - Viene sostituita dall'ora corrente utilizzando lo stesso formato del comando TIME.
%RANDOM% - Viene sostituita da un numero decimale casuale compreso tra 0 e 32767.
%ERRORLEVEL% - Viene sostituita dal valore di ERRORLEVEL corrente.
%CMDEXTVERSION% - Viene sostituita dal numero di versione corrente delle estensioni del processore dei comandi.
%CMDCMDLINE% - Viene sostituita dalla riga di comando con cui è stato inizialmente richiamato il processore dei comandi.
%HIGHESTNUMANODENUMBER% - Viene sostituita dal numero di nodo NUMA più alto nel computer.
elenco comandi dos >