martedì 18 dicembre 2018

Variabili con nome dinamico e ARRAY in batch

Buongiorno a tutti, oggi vediamo come utilizzare un trick molto speciale con il nostro amico batch...

... 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).



Ma ecco, vediamo come fare, in questo script con alcuni esempi.

@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.