PDA

Visualizza la versione completa : DOS cicli for o while


caimano73
24-07-2003, 17:01
ciao a tutti,
sapete come fare un ciclo di while o for all'interno di un file batch?


grazie e ciao

kentaromiura
24-07-2003, 17:04
usando errorlevel e goto??
non mi ricordo piu' come si fa'..

comunque usando il 4dos esistono tutti e due..

caimano73
25-07-2003, 14:00
up... :dhò:

nessuno ha qualche sperduto ricordo???

Johnny_Depp
25-07-2003, 14:57
I°parte

ForEsegue il comando specificato per ciascun file contenuto in un set di file.

Sintassi
for {%variabile|%%variabile} in (gruppo) do comando [ OpzioniRigaComando]

Parametri
{%variabile|%%variabile}
Obbligatorio. Rappresenta un parametro sostituibile. Utilizzare %variabile per eseguire il comando for dal prompt dei comandi. Utilizzare %%variabile per eseguire il comando for all'interno di un file batch. Le variabili fanno distinzione tra maiuscole e minuscole e devono essere rappresentate con un valore alfa, ad esempio %A, %B o %C.
(gruppo)
Obbligatorio. Specifica uno o più file, una o più directory, un intervallo di valori o stringhe di testo che si desidera elaborare mediante il comando specificato. Le parentesi sono obbligatorie.
comando
Obbligatorio. Specifica il comando che si desidera eseguire per ogni file, directory, intervallo di valori o stringa di testo indicata in (gruppo).
OpzioniRigaComando
Specifica le opzioni della riga di comando che si desidera utilizzare con il comando specificato.
/?
Visualizza informazioni della Guida al prompt dei comandi.
Osservazioni
Utilizzo del comando for
Il comando for può essere utilizzato all'interno di un file batch oppure direttamente dal prompt dei comandi.

Utilizzo di parametri batch
Con il comando for possono essere utilizzati gli attributi seguenti:

Il comando for sostituisce il valore di %variabile o %%variabile con ogni stringa di testo specificata in gruppo fino a quando il comando ha elaborato tutti i file.
I nomi delle variabili del comando for fanno distinzione tra maiuscole e minuscole, sono globali e non possono essere attivi contemporaneamente in numero superiore a 52.
Per evitare confusione con i parametri batch compresi tra %0 e %9, è possibile utilizzare qualsiasi carattere per variabile, ad eccezione dei numeri compresi tra 0 e 9. Nei file batch più semplici è sufficiente utilizzare un solo carattere, ad esempio %%f.
Nei file batch più complessi per distinguere tra loro le diverse variabili sostituibili, è possibile utilizzare più valori per variabile.
Specifica di un gruppo di file
Il parametro gruppo può rappresentare un unico gruppo o diversi gruppi di file. Per specificare un gruppo di file è possibile utilizzare i caratteri jolly * e ?. Di seguito sono riportati esempi di gruppi di file validi.

(*.doc)

(*.doc *.txt *.me)

(gen*.doc gen*.rpt feb*.doc feb*.rpt)

(ar??1991.* ap??1991.*)

Quando si utilizza il comando for, il primo valore in gruppo sostituisce %variabile o %%variabile e il comando specificato elabora questo valore. Tale procedura continua fino alla completa elaborazione di tutti i file o dei gruppi di file corrispondenti al valore di gruppo.

Utilizzo delle parole chiave in e do
In e do non sono parametri, ma parole chiave da utilizzare con il comando for. Se si omette una delle due parole chiave, verrà visualizzato un messaggio di errore.

Utilizzo di forme supplementari del comando for
Se le estensioni ai comandi sono abilitate (impostazione predefinita), è possibile utilizzare le forme del comando for seguenti:

Solo directory
Se gruppo contiene i caratteri jolly * e ?, il comando specificato viene eseguito per ogni directory che corrisponde a gruppo, invece che per un gruppo di file nella directory specificata. La sintassi è:

for /D {%% | %}variabile in (gruppo) do comando [OpzioniRigaComando]

Ricorsiva
Nella struttura delle directory, considerando come directory principale [Unità:]Percorso, esegue l'istruzione for in ogni directory della struttura. Se non viene specificata una directory dopo /R, il comando verrà eseguito a partire dalla directory corrente. Se gruppo è costituito solo da un punto (.), verrà enumerata solo la struttura della directory. La sintassi è:

for /R [[Unità :]Percorso] {%% | %}variabile in (gruppo) do comando [OpzioniRigaComando]

Iterazione di un intervallo di valori
Utilizzare una variabile iterativa per impostare il valore di inizio (ninizio) e quindi passare attraverso un intervallo di valori definito fino a quando il valore supera il valore di fine impostato (nfine). /L eseguirà l'iterazione confrontando il valore di ninizio con quello di nfine. Se ninizio è inferiore a nfine, il comando verrà eseguito. Se la variabile iterativa supera il valore di nfine, la shell dei comandi uscirà dal loop. È inoltre possibile specificare un valore negativo per npassaggio per passare attraverso un intervallo con valori decrescenti. Ad esempio, (1,1,5) genererà la sequenza 1 2 3 4 5, mentre (5,-1,1) la sequenza (5 4 3 2 1). La sintassi è:

for /L {%% | %}variabile in (ninizio,npassaggio,nfine) do comando [OpzioniRigaComando]

Iterazione e analisi dei file
Utilizzare l'analisi dei file per elaborare l'output di un comando, stringhe e il contenuto di un file. Utilizzare le variabili iterative per definire il contenuto o le stringhe che si desidera esaminare e utilizzare le diverse opzioni per ParolechiaveAnalisi per modificare ulteriormente l'analisi. Utilizzare l'opzione token di ParolechiaveAnalisi per specificare quali token devono essere passati come variabili iterative. Si noti che, se non si utilizza l'opzione token, /F esaminerà unicamente il primo token.

L'analisi dei file consiste nella lettura dell'output, della stringa o del contenuto del file, nella suddivisione in singole righe di testo e quindi nell'analisi di ciascuna riga in zero o più token. Il loop di for viene quindi richiamato mediante il valore della variabile iterativa impostato sul token. Per impostazione predefinita, /F passa il primo token delimitato da spazi di ogni riga di ogni file. Le righe vuote vengono ignorate. Le diverse sintassi sono:

for /F ["ParolechiaveAnalisi"] {%% | %}variabile in (grupponomifile) do comando [OpzioniRigaComando]

for /F ["ParolechiaveAnalisi"] {%% | %}variabile in ("StringaTesto") do comando [OpzioniRigaComando]

for /F ["ParolechiaveAnalisi"] {%% | %}variabile in ('comando') do comando [OpzioniRigaComando]

L'argomento grupponomifile specifica uno o più nomi di file. Prima di procedere con il file successivo specificato in grupponomifile, ogni file viene aperto, letto ed elaborato. Per ignorare il funzionamento predefinito dell'operazione di analisi, specificare "ParolechiaveAnalisi". Si tratta di una stringa racchiusa tra virgolette contenente una o più parole chiave per specificare le diverse opzioni dell'analisi.

Se si utilizza l'opzione usebackq, digitare una delle sintassi seguenti:

for /F ["usebackqParolechiaveAnalisi"] {%% | %}variabile in ("grupponomifile") do comando [OpzioniRigaComando]

for /F ["usebackqParolechiaveAnalisi"] {%% | %}variabile in ('StringaTesto') do comando [OpzioniRigaComando]

for /F ["usebackqParolechiaveAnalisi"] {%% | %}variabile in (`comando`) do comando [OpzioniRigaComando]

Nella tabella seguente vengono descritte le parole chiave per l'analisi che è possibile utilizzare per ParolechiaveAnalisi.

Parola chiave Descrizione
eol=c Specifica un carattere di fine riga (un solo carattere).
skip=n Specifica il numero di righe da ignorare all'inizio del file.
delims=xxx Specifica un set di delimitatori. Sostituisce il set di delimitatori predefinito di spazio e tabulazione.
tokens=x,y,m-n Specifica i token di ogni riga da passare al comando for per ogni iterazione. Ne consegue che vengono allocati nomi di variabili supplementari. La forma m-n rappresenta un intervallo che specifica i token dalla m sino alla n. Se l'ultimo carattere della stringa tokens= è un asterisco (*), verrà allocata un'ulteriore variabile che riceverà il testo della riga rimasto dopo l'analisi dell'ultimo token.
usebackq Specifica che è possibile racchiudere tra virgolette i nomi dei file specificati in grupponomifile, che una stringa tra virgolette inverse verrà eseguita come un comando e che una stringa racchiusa tra virgolette semplici è un comando espresso da una stringa di testo.

Sostituzione di variabili
I modificatori di sostituzione per i riferimenti delle variabili del comando for sono stati migliorati. Nella tabella seguente vengono descritte le sintassi facoltative, per qualsiasi variabile I.

Variabile con modificatore Descrizione
%~I Espande %I, il quale rimuove le virgolette di chiusura ("").
%~fI Espande %I in un nome di percorso completo.
%~dI Espande %I solo in una lettera di unità.
%~pI Espande %I solo in un percorso.
%~nI Espande %I solo in un nome di file.
%~xI Espande %I solo in una estensione di file.
%~sI Espande il percorso in modo da contenere solo nomi brevi.
%~aI Espande %I negli attributi del file.
%~tI Espande %I nella data/ora del file.
%~zI Espande %I nella dimensione del file.
%~$PATH:I Esegue una ricerca nelle directory elencate nella variabile di ambiente PATH ed espande %I nel percorso completo della prima directory individuata. Se il nome della variabile di ambiente non è definito o la ricerca non ha portato all'individuazione del file, questo modificatore si espande nella stringa vuota.

Johnny_Depp
25-07-2003, 14:58
II°parte

Nella tabella seguente vengono descritte le combinazioni di modificatori che è possibile utilizzare per ottenere risultati composti.

Variabile con modificatori abbinati Descrizione
%~dpI Espande %I solo in una lettera di unità e in un percorso.
%~nxI Espande %I solo in un nome di file e una estensione.
%~fsI Espande %I solo in un percorso completo con nomi di file brevi.
%~dp$PATH:I Esegue una ricerca nelle directory elencate nella variabile di ambiente PATH per %I e lo espande nella lettera di unità e nel percorso della prima directory individuata.
%~ftzaI Espande %I in una riga di output simile a dir.

Negli esempi sopra descritti %I e PATH possono essere sostituiti con altri valori validi. Un nome di variabile valido per for termina la sintassi %~.

L'utilizzo di nomi di variabili espressi con lettere maiuscole come %I può conferire maggiore leggibilità alle istruzioni ed evitare la confusione con i modificatori, che non fanno distinzione tra maiuscole e minuscole.

Analisi di una stringa
È anche possibile utilizzare la logica for /F, trasformando il grupponomifile racchiuso tra parentesi in una stringa utilizzando le virgolette semplici, ovvero 'grupponomifile'. Grupponomifile viene considerato come un'unica riga di input di un file, e viene quindi analizzato.

Output dell'analisi
È possibile utilizzare il comando for /F per analizzare l'output di un comando trasformando il grupponomifile racchiuso tra parentesi in una stringa racchiusa tra virgolette inverse. La stringa viene considerata come una riga di comando, passata a un Cmd.exe figlio e l'output sarà acquisito in memoria e analizzato come se si trattasse di un file.

Esempi
Per utilizzare il comando for in un file batch, utilizzare la sintassi seguente:

for %%variabile in (gruppo) do comando [OpzioniRigaComando]

Per visualizzare il contenuto di tutti i file nella directory corrente con estensione doc o txt utilizzando la variabile sostituibile %f, digitare:

for %f in (*.doc *.txt) do type %f

In questo esempio ogni file nella directory corrente con estensione doc o txt verrà sostituito con la variabile %f fino a quando non sarà visualizzato il contenuto di tutti i file. Per utilizzare questo comando in un file batch, sostituire tutte le occorrenze di %f con %%f. In caso contrario, la variabile sarà ignorata e verrà visualizzato un messaggio di errore.

Per analizzare un file ignorando le righe di commento, digitare:

for /F "eol=; tokens=2,3* delims=," %i in (miofile.txt) do @echo %i %j %k

Questo comando eseguirà l'analisi di ogni riga contenuta nel file Miofile.txt ignorando le righe che iniziano con un punto e virgola, passando il secondo e il terzo token di ogni riga al comando FOR. I token sono delimitati da virgole o spazi. L'istruzione FOR indica a %i di individuare il secondo token, a %j di individuare il terzo token e a %k di individuare i token restanti. Se i nomi di file indicati contengono spazi, racchiudere il testo fra virgolette, ad esempio "Nome File". Per utilizzare le virgolette, è necessario utilizzare la parola chiave usebackq. In caso contrario, le virgolette vengono interpretate come se definissero una stringa di testo da analizzare.

La variabile %i è dichiarata in modo esplicito nell'istruzione FOR, mentre %j e %k sono dichiarate in modo implicito tramite la stringa tokens=. È possibile specificare fino a 26 token nella stringa tokens=, a condizione che non si tenti di dichiarare una variabile superiore alla lettera 'z' o 'Z'.

Per analizzare l'output di un comando racchiudendo tra parentesi il grupponomifile, digitare:

for /F "usebackq delims==" %i IN (`set`) DO @echo %i
Questo esempio enumera i nomi delle variabili nell'ambiente corrente.

Significati della formattazione
Formato Significato
Corsivo Informazioni che devono essere specificate dall'utente
Grassetto Elementi che l'utente deve digitare esattamente come indicato
Puntini (...) Parametro che è possibile ripetere più volte in una riga di comando
Parentesi quadre ([]) Elementi facoltativi
Parentesi graffe ({}); varie scelte separate da una barra verticale (|). Esempio: {pari|dispari} Opzioni alternative delle quali l'utente deve sceglierne una sola
Tipo di carattere Courier Codice oppure output di programmi
preso dall'help on line di windows [Desktop\F1]
oppure, dal prompt digita: FOR /?

p.s. non penso che WHILE sia un comando batch???

Loading