... vediamo come "usare variabili con nome variabile" nei nostri script .bat
In inglese si potrebbe ricercare "Dynamic Variable Names in Batch"ossia "Nomi di variabile dinamici in batch"
Con un po' di impegno vedremo anche come utilizzare una pseudo ARRAY (matrice).
Dico "pseudo" perchè le array non esistono davvero in batch: si tratta di usare un nome particolare di variabile per farlo "sembrare" una array (es: %a[0]%, che si ottiene con: set a[0]=xxx) ed utilizzarlo come tale.
Ci sono almeno un milione di casi in cui questo è utile, ma ne cito qui solo un paio:
- memorizzare in variabile le risultanze di un comando in un For loop, salvandole in una variabile diversa e indicizzata per numero di ciclo (%a[123]% contiene la risultanza del 123esimo ciclo).
- richiamare una variabile diversa in base al risultato di un comando o di una operazione, che da come risultato il nome di quella variabile (lo so: sono contorto ma, fidatevi, mi è capitato).
@echo off
REM è NECESSARIO usare la DelayedExpansion, sia perchè così possiamo
usare sia il punto esclamativo che il percentuale come
REM delimitatori, sia perchè solitamente le variabili con nome dinamico
sono all'interno di un loop.
setlocal
EnableDelayedExpansion
REM settiamo %a% = alla stringa pippo e poi settiamo la variabile
%pippo%
set "a=pippo"
set "pippo=ciao, questo e'
un messaggio che verrà richiamato solo se sai il mio nome variabile"
REM quindi, per mezzo di questa bellissima DOPPIA NOTAZIONE con il ! e
il %, richiamiamo la variabile %pippo%
echo !%a%!
REM ######################## ESEMPIO 2: ARRAY e FOR LOOP con Dynamic
Variable name.
for /L %%c in (1,1,50) DO (
set array[%%c]=siamo nel ciclo
%%c
)
echo !array[25]!
REM come vedete becchiamo ESATTAMENTE la variabile 25.
BENE! spero di avervi solleticato abbastanza con questo tema.
Buone Feste a tutti e, come sempre, Happy Scripting!
Nessun commento:
Posta un commento
I commenti sono soggetti a moderazione, prima di essere pubblicati.
Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.