Utilizzo dell’istruzione FOR
L’istruzione FOR è un comando che consente di “ripetere” o ripetere i comandi più volte. È molto simile all’istruzione FOR fornita in diversi linguaggi di programmazione. L’istruzione FOR viene spesso utilizzata nei file batch, ma può anche essere utilizzata direttamente sulla riga di comando.
Come promemoria, la forma generale del ciclo FOR è:
FOR %variable IN (set) DO command [command-parameters]
Dove “variabile” è una singola lettera, “(set)” specifica un insieme di uno o più file, “comando” è il comando del prompt dei comandi da eseguire per ogni file nel set e “parametri di comando” sono facoltativi parametri da passare a “comando”.
Quindi diciamo che ti sono stati dati diversi file COM .dll che devi registrare nel registro di Windows. Potresti metterli tutti in una cartella e quindi eseguire il seguente comando da quella cartella:
C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i
Ciò che fa, per ogni file .dll che trova nella directory corrente, è eseguire il programma regsvr32 su di esso. (L’opzione “/ s” indica semplicemente a regsvr32 di eseguire il proprio lavoro in silenzio.) La variabile utilizzata (“% i”) fa distinzione tra maiuscole e minuscole e assume il valore di ogni file .dll a sua volta. Il nome del file .dll viene quindi passato al programma regsvr32 utilizzando la stessa variabile “% i”.
Una variante del ciclo FOR generale utilizza l’opzione / L e ha questa forma generale:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
Questo esegue un ciclo in cui la variabile% è prima impostata su “start” e viene incrementata di “step” finché non raggiunge il valore “end”. (Questo utilizzo dovrebbe essere molto familiare ai programmatori.) Quindi diciamo che devi visualizzare l’elenco dei numeri da 1 a 5. Potresti farlo in questo modo:
C:\> FOR /L %i IN (1,1,5) DO @echo %i
Un’altra variante del ciclo FOR utilizza l’opzione / D e ha questa forma generale:
FOR /D %variable IN (set) DO command [command-parameters]
Con questa variante, se “set” contiene caratteri jolly, il comando funziona sui nomi delle directory invece che sui nomi dei file. Ciò sarebbe utile, ad esempio, se si desidera copiare un insieme di file da un albero di directory e mettere tutti i file in una directory.
Ad esempio, ho una directory chiamata \ Temp. Contiene sottodirectory chiamate \ Temp \ Temp2 e \ Temp \ Barry. Le directory \ Temp \ Barry e \ Temp \ Temp2 contengono i file che desidero copiare. Se volessi copiare tutti i file (senza la struttura della directory) nell’albero \ Temp in una directory chiamata \ Files, potrei farlo in questo modo:
C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files
Ho lasciato alla fine quella che penso sia la forma più esoterica del ciclo FOR. Sembra che l’uso dell’opzione / F ti consentirà di fare quasi tutto, se solo riesci a capire come usarlo. La forma generale è:
FOR /F "options" %variable IN (`command`) DO command [command-parameters]
(Spiacente, non sta tutto su una riga.) Ci sono diverse “opzioni che puoi usare e il primo” comando “(quello circondato dagli apostrofi all’indietro) può essere qualsiasi comando del prompt dei comandi. Quindi ecco un esempio di come usarlo:
FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"
(Spiacente, non sta tutto su una riga.) Questo comando esegue un comando DIR / B su C: \ Temp \ A.tmp. Per ogni file che trova, fa eco al nome del file e lo invia tramite pipe al comando Findstr, che cerca tutte le righe che contengono una “a”, “b” o “c”. Una cosa abbastanza strana da fare, scontato, ma almeno mostra come puoi usare / F. Ti suggerisco di fare FOR /? * Per ottenere un elenco completo di quali sono tutte le opzioni, e quindi sei sostanzialmente vincolato solo dalla tua immaginazione nel capire come usarlo.
È inoltre possibile utilizzare il comando FOR all’interno di un file batch. L’unica cosa diversa è che raddoppi i% -signs, mentre nella riga di comando usi solo un% -sign. Ad esempio, se il secondo esempio sopra dovesse essere inserito in un file batch, sarebbe simile a questo:
FOR /L %%i IN (1,1,5) DO @echo %%i
Questo suggerimento (13196) si applica a Windows 7, 8 e 10.