for

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. Utilizzare un solo segno di percentuale (%) per eseguire il comando for) al prompt dei comandi. Utilizzare i segni di percentuale (%%) per eseguire il per comando all'interno di un file batch. Le variabili sono tra maiuscole e minuscole e devono essere rappresentati con un valore alfabetico, ad esempio %a, %b, o %c.
(<set>) Obbligatorio. Specifica uno o più file, directory, o stringhe di testo o un intervallo di valori su cui eseguire il comando. Le parentesi sono obbligatorie.
<command> Obbligatorio. Specifica il comando che si desidera eseguire orizzontale 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.

Osservazioni:

  • È possibile utilizzare 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 sono tra maiuscole e minuscole, globale e non superiore a 52 possono essere attive contemporaneamente.

    • Per evitare confusione con i parametri batch da %0 a %9, è possibile usare qualsiasi carattere per la variabile tranne i numeri da 0 a 9. Per i file batch semplici, funzionerà un singolo carattere come %%f.

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

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

    (*.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. Il processo continua finché tutti i file (o gruppi di file) che corrispondono al set valore vengono elaborati.

  • In e do 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 di comando 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 (invece di un set di file in una directory specificata) che corrisponde a set. La sintassi è:

      for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
      
    • Ricorsivo: analizza l'albero di directory che ha origine in drive:path ed esegue l'istruzione for in ogni directory dell'albero. Se viene specificata alcuna directory dopo /r, la directory corrente viene utilizzata come directory radice. Se set è costituito solo da un punto (.), enumera solo la struttura di directory. La sintassi è:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      
    • L'iterazione di un intervallo di valori: usare una variabile iterativa per impostare il valore iniziale (start#) e procedere con un determinato intervallo di valori fino a quando il valore non supera il valore di fine 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 di uscire dal ciclo. È inoltre possibile utilizzare un valore negativo step# per scorrere un intervallo di valori decrescenti. Ad esempio, (1,1,5) genera la sequenza 1 2 3 4 5 e (5,-1,1) genera la sequenza 1 2 3 4 di 5. La sintassi è:

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]
      
    • Iterating and file parsing: usa il file di analisi dell'output del comando di processo, stringhe e contenuto del file di analisi dei 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 di token parsingkeywords per specificare quali token devono essere passati come variabili iterative. Se usato senza l'opzione di token, /f esaminerà solo il primo token.

      L'analisi del file è costituito da leggere l'output, stringa o il contenuto del file, quindi suddividerlo in singole righe di testo e l'analisi di ogni riga in zero o più token. Il per ciclo viene quindi chiamato con il valore della variabile iterativo impostato sul token. Per impostazione predefinita, /f passa il primo spazio separato token da ogni riga di ogni file. Le righe vuote vengono ignorate.

      La sintassi sono:

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

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

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

      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<Set>) do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<LiteralString>') do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlinepptions>]
      

      Nella tabella seguente, sono elencate le parole chiave di analisi che è possibile utilizzare 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. Sostituisce il set di delimitatori predefinito di spazio e tabulazione.
      tokens=<x,y,m–n> Specifica i token da ogni riga deve essere passato il per ciclo per ogni iterazione. Di conseguenza, i nomi delle variabili aggiuntive vengono allocati. m-n specifica un intervallo dai token m a n. Se l'ultimo carattere di token = stringa è un asterisco (*), un'altra variabile viene allocata e riceve il testo rimanente nella riga dopo l'ultimo token che viene analizzato.
      usebackq Specifica di eseguire una stringa con virgolette aperte come comando, usare una stringa con virgoletta singola come stringa letterale o, per i nomi di file lunghi che contengono spazi, permettere i nome file in <set>, entrambi racchiusi tra virgolette doppie.
    • Variable substitution: questa tabella elenca la sintassi facoltativa (per qualsiasi variabile I):

      Variabile con modificatore Descrizione
      %~I Espande %I che rimuove le virgolette circostanti.
      %~fI Espande %I a un nome percorso pienamente qualificato.
      %~dI Espande %I solo a una lettera di unità.
      %~pI Espande %I solo a un percorso.
      %~nI Espande%I solo a un nome di file.
      %~xI Espande %I solo a un'estensione del nome file.
      %~sI Espande percorso che contenga solo i nomi brevi.
      %~aI Espande %I agli attributi del file del file.
      %~tI Espande %I alla data e all'ora del file.
      %~zI Espande %I alle dimensioni del file.
      %~$PATH:I Esegue la ricerca nelle directory elencate nella variabile di ambiente PATH ed espande %I fino al 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 nella stringa vuota.

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

      Variabile con modificatori combinati Descrizione
      %~dpI Espande%I solo a una lettera di unità e a un percorso.
      %~nxI Espande %I solo a un'estensione e nome del file.
      %~fsI Espande %I a un nome di percorso completo con solo nomi brevi.
      %~dp$PATH:I Cerca %1 nelle directory elencate nella variabile di ambiente PATH per %Ie si espande alla lettera di unità e al percorso della prima directory trovata.
      %~ftzaI Espande %I a una riga di output simile a dir.

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

      Usando nomi di variabili maiuscole, ad esempio %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 in 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 analizzano <literalstring> tra virgolette doppie, i simboli di comando come (\ & | > < ^) vengono considerati come caratteri ordinari.

  • Analisi dell'output: È possibile utilizzare il for /f comando per analizzare l'output di un comando inserendo una virgoletta <command> inversa tra le parentesi. Viene considerato come una riga di comando, che viene passata a un Cmd.exe figlio. L'output viene acquisito in memoria e analizzato come se fosse un file.

Esempi

Utilizzare per 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, tipo:

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

Nell'esempio precedente, ogni file con estensione doc o txt nella directory corrente viene sostituito con il %f variabile 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 % %. In caso contrario, la variabile viene ignorata e viene visualizzato un messaggio di errore.

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

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

Questo comando consente di analizzare ogni riga in myfile.txt. Ignora le righe che iniziano con un punto e virgola e passa il token secondo e terzo da ogni riga per il per corpo (i token vengono separati da virgole o spazi). Il corpo del per istruzione fa riferimento avvii per ottenere il token, il secondo %j per ottenere il terzo token e %k per ottenere tutti i token rimanenti. Se i nomi dei file che viene fornito contiene spazi, utilizzare le virgolette intorno al testo (ad esempio, Nome file). Per utilizzare le virgolette, è necessario utilizzare usebackq. In caso contrario, le virgolette doppie vengono interpretate come definizione di una valore letterale stringa da analizzare.

%i viene dichiarato in modo esplicito nel per istruzione. %j e %k in modo implicito vengono dichiarate utilizzando token =. È possibile usare tokens= per specificare fino a 26 token, se non si verifica 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