Condividi tramite


per

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

Sintassi

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

Parametri

Parametro Descrizione
{%% \| %}<variable> Obbligatorio. Rappresenta un parametro sostituibile. Usare un single percent sign (%) per eseguire il comando for al prompt dei comandi. Usare segni di doppia percentuale (%%) per eseguire il comando per all'interno di un file batch. Le variabili fanno distinzione tra maiuscole e minuscole e devono essere rappresentate con un valore alfabetico, ad esempio %a, %bo %c.
(<set>) Obbligatorio. 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> Obbligatorio. Specifica il comando che si desidera eseguire in ogni file, directory o stringa di testo oppure nell'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.

Osservazioni:

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

  • Gli attributi seguenti si applicano a per il comando :

    • 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 usare qualsiasi carattere per variabile ad eccezione dei numeri da 0 a 9. Per i file batch semplici, un singolo carattere, %%f ad esempio, funzionerà.

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

  • Il parametro set può rappresentare un singolo gruppo di file o più gruppi di file. È possibile usare 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 usa questo comando, il primo valore in set sostituisce % variable o %% variablee quindi il comando specificato elabora questo valore. Questo continua fino a quando non vengono elaborati tutti i file (o i gruppi di file) che corrispondono al valore impostato .

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

  • Se le estensioni dei comandi sono abilitate (ovvero l'impostazione predefinita), sono supportate le seguenti forme aggiuntive di per :

    • 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: Illustra l'albero di directory rooted 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 usata 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'iterativo 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. È anche possibile usare 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. Usare le variabili iterative per definire il contenuto o le stringhe da esaminare e usare le varie opzioni parsingkeywords per modificare ulteriormente l'analisi. Usare l'opzione del token parsingkeywords per specificare quali token devono essere passati come variabili iterative. Se usato 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 nel 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 usa l'opzione usebackq , usare 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 usare per parsingkeywords.

      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. In questo modo viene sostituito il set di delimitatori predefinito di spazio e tabulazioni.
      token=<x,y,m–n> Specifica i token da ogni riga da passare al ciclo for per ogni iterazione. Di conseguenza, vengono allocati nomi di variabili aggiuntivi. m-n specifica un intervallo, compreso tra me ntoken. Se l'ultimo carattere nella stringa tokens= è un asterisco (*), viene allocata una variabile aggiuntiva e riceve il testo rimanente sulla 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 di variabili: La tabella seguente elenca la sintassi facoltativa (per qualsiasi variabile I):

      Variabile con modificatore Descrizione
      %~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 Descrizione
      %~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 %I Si espande in una riga di output simile a dir.

      Negli esempi precedenti è possibile sostituire %I e PATH con altri valori validi. Un valore valido per il nome della variabile 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 usare il for /f comando per analizzare l'output di un comando posizionando una virgolette <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.

Esempi

Per usare per in un file batch, usare la sintassi seguente:

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

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

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

Nell'esempio precedente, ogni file con estensione .doc o .txt nella directory corrente viene sostituito dalla variabile %f finché non viene visualizzato il contenuto di ogni file. Per usare 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 in myfile.txt. Ignora le righe che iniziano con un punto e virgola e passa il secondo e il terzo token da ogni riga al corpo ( i token sono delimitati da virgole o spazi). Il corpo dell'istruzione for fa riferimento %i per ottenere il secondo token, %j ottenere il terzo token e %k ottenere tutti i token rimanenti. Se i nomi di file forniti contengono spazi, usare le virgolette intorno al testo( ad esempio, Nome file). Per usare le virgolette, è necessario usare usebackq. In caso contrario, le virgolette vengono interpretate come la definizione di una stringa letterale da analizzare.

%i viene dichiarato in modo esplicito nell'istruzione for . %j e %k vengono dichiarati in modo implicito usando token=. È possibile usare token= per specificare fino a 26 token, se non causa un tentativo di dichiarare una variabile superiore alla lettera z o Z.

Per analizzare l'output di un comando inserendo un 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