para

Executa um comando especificado para cada arquivo, dentro de um conjunto de arquivos.

Sintaxe

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

Parâmetros

Parâmetro Descrição
{%% \| %}<variable> Obrigatórios. Representa um parâmetro substituível. Use um único sinal de porcentagem (%) para executar o comando for no prompt de comando. Use sinais de porcentagem dupla (%%) para executar o comando for em um arquivo em lote. As variáveis diferenciam maiúsculas de minúsculas e devem ser representadas com um valor alfabético como %a, %b ou %c.
(<set>) Obrigatórios. Especifica um ou mais arquivos, diretórios ou cadeias de texto ou um intervalo de valores nos quais executar o comando. Os parênteses são necessários.
<command> Obrigatórios. Especifica o comando que queira executar em cada arquivo, diretório ou cadeia de caracteres de texto ou no intervalo de valores incluídos no conjunto.
<commandlineoptions> Especifica as opções de linha de comando que queira usar com o comando especificado.
/? Exibe a ajuda no prompt de comando.

Comentários

  • Use esse comando em um arquivo em lote ou diretamente no prompt de comando.

  • Os seguintes atributos se aplicam ao comando for:

    • Esse comando substitui % variable ou %% variable por cada cadeia de caracteres de texto no conjunto especificado até que o comando especificado processe todos os arquivos.

    • Os nomes de variáveis diferenciam maiúsculas de minúsculas e são globais. Não é possível ter mais de 52 nomes de variáveis ativos por vez.

    • Para evitar confusão com os parâmetros do lote, %0 por meio de %9, use qualquer caractere para variável, exceto os numerais de 0 a 9. Para arquivos em lotes simples, um único caractere como %%f funcionará.

    • Use os vários valores para variáveis em arquivos em lotes complexos para distinguir diferentes variáveis substituíveis.

  • O parâmetro conjunto pode representar um único grupo de arquivos ou vários grupos de arquivos. Use os caracteres curinga (* e ?) para especificar um conjunto de arquivos. Os seguintes conjuntos de arquivos são válidos:

    (*.doc)
    (*.doc *.txt *.me)
    (jan*.doc jan*.rpt feb*.doc feb*.rpt)
    (ar??1991.* ap??1991.*)
    
  • Ao usar esse comando, o primeiro valor no conjunto substitui % variable ou %% variable e, em seguida, o comando especificado processa esse valor. Isso continuará até que todos os arquivos (ou grupos de arquivos) que correspondem ao valor conjunto sejam processados.

  • Em e fazer não são parâmetros, mas você deve usá-los com este comando. Se você omitir qualquer uma dessas palavras-chave, uma mensagem de erro será exibida.

  • Se as extensões de comando estiverem habilitadas (esse é o padrão), as seguintes formas adicionais de para têm suporte:

    • Somente diretórios: se conjunto contiver caracteres curinga (* ou ?), o comando determinado será executado para cada diretório (em vez de um conjunto de arquivos em um diretório especificado) que corresponde ao conjunto. A sintaxe do é:

      for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
      
    • Recursiva: percorre a árvore de diretório com raiz em unidade:caminho e executa a instrução para em cada diretório da árvore. Se nenhum diretório for determinado após /r, o diretório atual será usado como o diretório raiz. Se conjunto for apenas um único período (.), ele só enumera a árvore de diretório. A sintaxe do é:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      
    • Iterando um intervalo de valores: use uma variável iterativa para definir o valor inicial (início#) e, em seguida, percorra um intervalo definido de valores até que o valor exceda o valor final definido (fim#). /l executa o iterativo comparando início# com fim#. Se início# for menor que fim#, o comando executa. Quando a variável iterativa excede fim#, o shell de comando sai do loop. Você também pode usar uma etapa# negativa para percorrer um intervalo em valores decrescentes. Por exemplo, (1,1,5) gera a sequência 1 2 3 4 5 e (5,-1,1) gera a sequência 5 4 3 2 1. A sintaxe do é:

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]
      
    • Iteração e análise de arquivos: use a análise de arquivos para processar a saída do comando, as cadeias de caracteres e o conteúdo do arquivo. Use variáveis iterativas para definir o conteúdo ou as cadeias de caracteres que queira examinar e use as várias opções de parsingkeywords para modificar ainda mais a análise. Use a opção de token de parsingkeywords para especificar quais tokens devem ser passados como variáveis iterativas. Quando usado sem a opção de token, /f examinará apenas o primeiro token.

      A análise de arquivos consiste em ler a saída, a cadeia de caracteres ou o conteúdo do arquivo e, em seguida, dividi-lo em linhas individuais de texto e analisar cada linha em zero ou mais tokens. Em seguida, o loop para é chamado com o valor da variável iterativa definido como o token. Por padrão, /f passa o primeiro token separado em branco de cada linha de cada arquivo. As linhas em branco são ignoradas.

      As sintaxes são:

      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>]
      

      O argumento conjunto especifica um ou mais nomes de arquivo. Cada arquivo é aberto, lido e processado antes de passar para o próximo arquivo no conjunto. Para substituir o comportamento de análise padrão, especifique parsingkeywords. Essa é uma cadeia de caracteres entre aspas que contém uma ou mais palavras-chave para especificar diferentes opções de análise.

      Caso use a opção usebackq, use uma das seguintes sintaxes:

      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>]
      

      A tabela a seguir lista as palavras-chave de análise que é possível usar para parsingkeywords.

      Palavra-chave Descrição
      eol=<c> Especifica um fim de caractere de linha (apenas um caractere).
      skip=<n> Especifica o número de linhas a serem ignoradas no início do arquivo.
      delims=<xxx> Especifica um conjunto de delimitadores. Isso substitui o conjunto de delimitador padrão de espaço e guia.
      tokens=<x,y,m–n> Especifica quais tokens de cada linha devem ser passados para o loop para em cada iteração. Como resultado, nomes de variáveis adicionais são alocados. m-n especifica um intervalo, do mth até os tokens nth. Se o último caractere na cadeia de caracteres tokens= for um asterisco (*), uma variável adicional será alocada e receberá o texto restante na linha após o último token analisado.
      usebackq Especifica executar uma cadeia de caracteres com aspas inativas como um comando, usar uma cadeia de caracteres de aspas simples como uma cadeia de caracteres literal ou, para nomes de arquivo longos que contenham espaços, permitir que os nomes de arquivo no <set>, sejam colocados entre aspas duplas.
    • Substituição de variável: a tabela a seguir lista a sintaxe opcional (para qualquer variável I):

      Variável com modificador Descrição
      %~I Expande %I, o que remove as aspas ao redor.
      %~fI Expande %I, para um nome de caminho totalmente qualificado.
      %~dI Expande %I, apenas para uma letra de unidade.
      %~pI Expande %I, para apenas um caminho.
      %~nI Expande %I, apenas para um nome de arquivo.
      %~xI Expande %I, apenas para uma extensão de nome de arquivo.
      %~sI Expande o caminho para conter apenas nomes curtos.
      %~aI Expande %I, para os atributos de arquivo do arquivo.
      %~tI Expande %I, para a data e hora do arquivo.
      %~zI Expande %I, para o tamanho do arquivo.
      %~$PATH:I Pesquisa os diretórios listados na variável de ambiente CAMINHO e se expande %I, para o nome totalmente qualificado do primeiro diretório encontrado. Se o nome da variável de ambiente não estiver definido ou o arquivo não for encontrado pela pesquisa, esse modificador se expandirá para a cadeia de caracteres vazia.

      A tabela a seguir lista as combinações de modificador que é possível usar para obter resultados compostos.

      Variável com modificadores combinados Descrição
      %~dpI Expande %I, para uma letra de unidade e somente caminho.
      %~nxI Expande %I, apenas para um nome de arquivo e extensão.
      %~fsI Expande %I, para um nome de caminho completo com apenas nomes curtos.
      %~dp$PATH:I Pesquisa os diretórios listados na variável de ambiente CAMINHO e %I expande para a letra da unidade e o caminho do primeiro encontrado.
      %~ftzaI Expande %I, para uma linha de saída que é como dir.

      Nos exemplos acima, é possível substituir %I e CAMINHO por outros valores válidos. Um válido para o nome da variável encerra a sintaxe %~.

      Usando nomes de variáveis maiúsculas, como %I, torne seu código mais legível e evite confusão com os modificadores, que não diferenciam maiúsculas de minúsculas.

  • Analisando uma cadeia de caracteres: use a for /f lógica de análise em uma cadeia de caracteres imediata encapsulando <literalstring> em: aspas duplas (sem usebackq) ou entre aspas simples (com usebackq), por exemplo, (MyString) ou ('MyString'). <literalstring> é tratado como uma única linha de entrada de um arquivo. Ao analisar aspas <literalstring> duplas, símbolos de comando como (\ & | > < ^) são tratados como caracteres comuns.

  • Saída de análise: use o comando for /f para analisar a saída de um comando colocando uma aspas invertidas <command> entre os parênteses. Ele é tratado como uma linha de comando, que é passada para um Cmd.exe filho. A saída é capturada na memória e analisada como se fosse um arquivo.

Exemplos

Para usar para um arquivo em lote, use a seguinte sintaxe:

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

Para exibir o conteúdo de todos os arquivos no diretório atual que têm a extensão .doc ou .txt usando a variável substituível %f, digite:

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

No exemplo anterior, cada arquivo que tem a extensão .doc ou .txt no diretório atual é substituído pela variável %f até que o conteúdo de cada arquivo seja exibido. Para usar esse comando em um arquivo em lote, substitua todas as ocorrências de %f por %%f. Caso contrário, a variável será ignorada e uma mensagem de erro será exibida.

Para analisar um arquivo, ignorando linhas comentadas, digite:

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

Esse comando analisa cada linha no myfile.txt. Ele ignora linhas que começam com um ponto e vírgula e passa o segundo e o terceiro token de cada linha para o corpo do para (os tokens são delimitados por vírgulas ou espaços). O corpo da instrução para faz referência a %i para obter o segundo token, %j para obter o terceiro token e %k para obter todos os tokens restantes. Se os nomes de arquivo fornecidos contiverem espaços, use aspas ao redor do texto (por exemplo, Nome do Arquivo). Para usar aspas, use usebackq. Caso contrário, as aspas serão interpretadas como definindo uma cadeia de caracteres literal a ser analisada.

%i é declarado explicitamente na instrução para. %j e %k são declarados implicitamente usando tokens=. Use tokens= para especificar até 26 tokens, se não causar uma tentativa de declarar uma variável maior que a letra z ou Z.

Para analisar a saída de um comando colocando oconjunto entre os parênteses, digite:

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

Para executar um loop recursivo de todos os arquivos em um diretório, incluindo subdiretórios e ecoar seu caminho completo, quando foram modificados pela última vez e o tamanho de arquivo, digite:

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