Condividi tramite


for

Esegue un comando specificato per ogni file, all'interno di un set di file.

Syntax

for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]

Parameters

Parameter Description
{%% \| %}<variable> Required. Rappresenta un parametro sostituibile. Utilizzare un singolo segno di percentuale (%) per eseguire il comando for al prompt dei comandi. Utilizzare il doppio segno di percentuale (%%) 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 alfabetico come %a, %bo %c.
(<set>) Required. Specifica uno o più file, directory o stringhe di testo o un intervallo di valori in cui eseguire il comando. Le parentesi sono obbligatorie.
<command> Required. Specifica il comando che si desidera eseguire su ogni file, directory o stringa di testo o sull'intervallo di valori inclusi in set.
<commandlineoptions> Specifica le opzioni della riga di comando che si desidera utilizzare con il comando specificato.
/? Visualizza la guida al prompt dei comandi.

Remarks

  • È possibile usare questo comando all'interno di un file batch o direttamente dal prompt dei comandi.

  • I seguenti attributi si applicano al comando for :

    • Questo comando sostituisce % variable o %% variable con ogni stringa di testo nel set specificato fino a quando il comando specificato non elabora tutti i file.

    • I nomi delle variabili fanno distinzione tra maiuscole e minuscole, globali e non più di 52 possono essere attivi alla volta.

    • Per evitare confusione con i parametri batch, %0 tramite %9, è possibile utilizzare qualsiasi carattere per la variabile ad eccezione dei numeri da 0 a 9. Per i file batch semplici, un singolo carattere, %%f ad esempio, funzionerà.

    • È possibile utilizzare più valori per la variabile in file batch complessi per distinguere diverse variabili sostituibili.

  • Il parametro set può rappresentare un singolo gruppo di file o più gruppi di file. È possibile utilizzare i caratteri jolly (* e ?) per specificare un set di file. Di seguito sono riportati set di file validi:

    (*.doc)
    (*.doc *.txt *.me)
    (jan*.doc jan*.rpt feb*.doc feb*.rpt)
    (ar??1991.* ap??1991.*)
    
  • Quando si utilizza questo comando, il primo valore in set sostituisce % variable o %% variable, quindi il comando specificato elabora questo valore. Questa operazione continua fino a quando non vengono elaborati tutti i file (o gruppi di file) che corrispondono al valore impostato .

  • In e do non sono parametri, ma è necessario utilizzarli con questo comando. Se si omette una di queste parole chiave, viene visualizzato un messaggio di errore.

  • Se le estensioni dei comandi sono abilitate (impostazione predefinita), sono supportate le seguenti forme aggiuntive di for :

    • Solo directory: Se set contiene caratteri jolly (* o ?), il comando specificato viene eseguito per ogni directory (anziché per un set di file in una directory specificata) che corrisponde a set. La sintassi è:

      for /d {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      
    • Ricorsivo: Percorre l'albero delle directory che è radicato in drive:path ed esegue l'istruzione for in ogni directory dell'albero. Se non viene specificata alcuna directory dopo /r, la directory corrente viene utilizzata come directory radice. Se set è solo un singolo punto (.), enumera solo l'albero delle directory. La sintassi è:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      
    • Iterazione di un intervallo di valori: Usare una variabile iterativa per impostare il valore iniziale (start#) e quindi eseguire un intervallo di valori impostato fino a quando il valore non supera il valore finale impostato (end#). /l esegue l'iterazione confrontando start# con end#. Se start# è minore di end# il comando viene eseguito. Quando la variabile iterativa supera end#, la shell dei comandi esce dal ciclo. È inoltre possibile utilizzare un passaggio negativo# per scorrere un intervallo in valori decrescenti. Ad esempio, (1,1,5) genera la sequenza 1 2 3 4 5 e (5,-1,1) genera la sequenza 5 4 3 2 1. La sintassi è:

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlineoptions>]
      
    • Iterazione e analisi dei file: Usare l'analisi dei file per elaborare l'output dei comandi, le stringhe e il contenuto del file. Utilizzare le variabili iterative per definire il contenuto o le stringhe che si desidera esaminare e utilizzare le varie opzioni parsingkeywords per modificare ulteriormente l'analisi. Utilizzare l'opzione token parsingkeywords per specificare quali token devono essere passati come variabili iterative. Se utilizzato senza l'opzione token, /f esaminerà solo il primo token.

      L'analisi dei file è costituita dalla lettura dell'output, della stringa o del contenuto del file e quindi dell'suddivisione in singole righe di testo e l'analisi di ogni riga in zero o più token. Il ciclo for viene quindi chiamato con il valore della variabile iterativa impostato sul token. Per impostazione predefinita, /f passa il primo token separato vuoto da ogni riga di ogni file. Le righe vuote vengono ignorate.

      Le sintassi sono:

      for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlineoptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlineoptions>]
      

      L'argomento set specifica uno o più nomi di file. Ogni file viene aperto, letto ed elaborato prima di passare al file successivo del set. Per eseguire l'override del comportamento di analisi predefinito, specificare parsingkeywords. Si tratta di una stringa tra virgolette che contiene una o più parole chiave per specificare diverse opzioni di analisi.

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

      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<literalstring>') do <command> [<commandlineoptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlineoptions>]
      

      Nella tabella seguente sono elencate le parole chiave di analisi che è possibile utilizzare per l'analisi delle parole chiave.

      Keyword Description
      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. In questo modo viene sostituito il set di delimitatori predefinito di spazio e tabulazioni.
      tokens=<x,y,m-n> Specifica quali token di ogni riga devono essere passati al ciclo for per ogni iterazione. Di conseguenza, vengono allocati nomi di variabili aggiuntivi. m-n specifica un intervallo, dal mesimo al nesimo token. Se l'ultimo carattere della stringa tokens= è un asterisco (*), viene allocata una variabile aggiuntiva che riceve il testo rimanente nella riga dopo l'ultimo token analizzato.
      usebackq Specifica di eseguire una stringa racchiusa tra virgolette come comando, usare una stringa tra virgolette singole come stringa letterale o, per i nomi di file lunghi che contengono spazi, consentire nomi di file in <set>, ognuno racchiuso tra virgolette doppie.
    • Sostituzione variabile: Nella tabella seguente è elencata la sintassi facoltativa (per qualsiasi variabile I):

      Variabile con modificatore Description
      %~I %I Espande che rimuove le virgolette circostanti.
      %~fI %I Si espande fino a un nome di percorso completo.
      %~dI %I Si espande solo in una lettera di unità.
      %~pI %I Si espande solo in un percorso.
      %~nI %I Si espande solo in un nome di file.
      %~xI %I Si espande solo in un'estensione di file.
      %~sI Espande il percorso in modo da contenere solo nomi brevi.
      %~aI %I Si espande fino agli attributi del file.
      %~tI %I Si espande fino alla data e all'ora del file.
      %~zI %I Si espande fino alle dimensioni del file.
      %~$PATH:I Cerca nelle directory elencate nella variabile di ambiente PATH ed espande %I il nome completo della prima directory trovata. Se il nome della variabile di ambiente non è definito o il file non viene trovato dalla ricerca, questo modificatore si espande alla stringa vuota.

      Nella tabella seguente sono elencate le combinazioni di modificatori che è possibile usare per ottenere risultati composti.

      Variabile con modificatori combinati Description
      %~dpI %I Si espande solo in una lettera di unità e in un percorso.
      %~nxI %I Si espande solo con un nome di file e un'estensione.
      %~fsI %I Si espande in un nome di percorso completo solo con nomi brevi.
      %~dp$PATH:I Cerca le directory elencate nella variabile di ambiente PATH e %I si espande fino alla lettera di unità e al percorso del primo trovato.
      %~ftzaI Si espande %I in una riga di output simile a dir.

      Negli esempi precedenti è possibile sostituire %I e PATH con altri valori validi. Un nome di variabile valido termina la %~ sintassi.

      Usando nomi di variabili maiuscole come %I, è possibile rendere il codice più leggibile ed evitare confusione con i modificatori, che non fanno distinzione tra maiuscole e minuscole.

  • Analisi di una stringa: È possibile usare la for /f logica di analisi su una stringa immediata eseguendo il wrapping <literalstring> tra virgolette doppie (senza usebackq) o tra virgolette singole (con usebackq), ad esempio (MyString) o ('MyString'). <literalstring> viene considerato come una singola riga di input da un file. Quando si <literalstring> analizzano tra virgolette doppie, i simboli di comando come (\ & | > < ^) vengono considerati come caratteri ordinari.

  • Output di analisi: È possibile utilizzare il for /f comando per analizzare l'output di un comando inserendo un back-quoteed <command> tra parentesi. Viene considerato come riga di comando, che viene passato a un Cmd.exefiglio. L'output viene acquisito in memoria e analizzato come se fosse un file.

Examples

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

for {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]

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

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

Nell'esempio precedente, ogni file con l'estensione .doc o .txt nella directory corrente viene sostituito alla variabile %f fino a quando non viene visualizzato il contenuto di ogni file. Per utilizzare questo comando in un file batch, sostituire ogni occorrenza di %f con %%f. In caso contrario, la variabile viene ignorata e viene visualizzato un messaggio di errore.

Per analizzare un file, ignorando le righe commentate, digitare:

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

Questo comando analizza ogni riga inmyfile.txt. Ignora le righe che iniziano con un punto e virgola e passa il secondo e il terzo token da ogni riga al corpo for (i token sono delimitati da virgole o spazi). Il corpo dell'istruzione for fa riferimento a%i per ottenere il secondo token, %j per ottenere il terzo token e %k per ottenere tutti i token rimanenti. Se i nomi di file forniti contengono spazi, usare le virgolette intorno al testo( ad esempio, Nome file). Per utilizzare le virgolette, è necessario utilizzare usebackq. In caso contrario, le virgolette vengono interpretate come la definizione di una stringa letterale da analizzare.

%i è dichiarato in modo esplicito nell'istruzione for . %j e %k vengono dichiarati implicitamente utilizzando tokens=. È possibile utilizzare tokens= per specificare fino a 26 token, se ciò non provoca un tentativo di dichiarare una variabile superiore alla lettera z o Z.

Per analizzare l'output di un comando inserendo set tra parentesi, digitare:

for /f "usebackq delims==" %i in (`set`) do @echo %i

Per eseguire un ciclo ricorsivo di tutti i file in una directory, incluse le sottodirectory ed eseguire l'eco del percorso completo, quando sono state modificate per l'ultima modifica e le relative dimensioni del file, digitare:

for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA