For
Executa um determinado comando para cada arquivo em um conjunto de arquivos.
Sintaxe
for {%variável|%%variável} in (conjunto) do comando [opções_da_linha_de_comando]
Parâmetros
- {%variável|%%variável}
- Obrigatório. Representa um parâmetro substituível. Utilize %variável para executar for a partir do prompt de comando. Utilize %%variável para executar o comando for dentro de um arquivo em lotes. As variáveis diferenciam maiúsculas de minúsculas e devem ser representadas com um valor alfabético, como %A, %B ou %C.
- (conjunto)
- Obrigatório. Especifica um ou mais arquivos, pastas, intervalo de valores ou sequências de texto a serem processados com o comando especificado. Os parênteses são obrigatórios.
- comando
- Obrigatório. Especifica o comando a ser executado em cada arquivo, pasta, intervalo de valores ou sequência de texto incluído no (conjunto) especificado.
- opções_da_linha_de_comando
- Especifica quaisquer opções da linha de comando a serem utilizadas com o comando especificado.
- /?
- Exibe ajuda no prompt de comando.
Comentários
- Usando for
O comando for pode ser utilizado dentro de um arquivo em lotes ou diretamente no prompt de comando.
- Usando parâmetros em lote
Os seguintes atributos se aplicam ao comando for:
- O comando for substitui %variável ou %%variável por cada sequência de texto no conjunto especificado até o comando processar todos os arquivos.
- Os nomes das variáveis de for são globais, diferenciam maiúsculas de minúsculas e apenas 52 podem estar ativas simultaneamente.
- Para evitar confusão com os parâmetros em lote de %0 a %9, qualquer caractere pode ser utilizado para variável, exceto os algarismos de 0 a 9. Para arquivos em lote simples, basta um único caractere, como %%f.
- Você pode utilizar vários valores para variável em arquivos em lote complexos a fim de distinguir diferentes variáveis substituíveis.
- Especificando um grupo de arquivos
O parâmetro conjunto pode representar um único grupo de arquivos ou vários grupos de arquivos. Podem ser utilizados curingas, isto é, * e ? para especificar um conjunto de arquivos. São válidos os seguintes conjuntos de arquivos:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
Quando você utiliza o comando for, o primeiro valor do conjunto substitui %variável ou %%variável e, então, o comando especificado processa esse valor. Esse procedimento continua até que todos os arquivos (ou grupos de arquivos) que correspondam ao valor do conjunto sejam processados.
- Usando as palavras-chave in e do
In e do não são parâmetros, mas devem ser usadas com for. Se alguma dessas palavras-chave for omitida, será mostrada uma mensagem de erro.
- Usando formas adicionais de for
Se as extensões de comando estiverem ativadas (o padrão), haverá suporte para as seguintes formas adicionais do comando for:
- Somente pastas
Se conjunto contiver curingas (* e ?), o comando especificado será executado para cada pasta (em vez de um conjunto de arquivos em uma pasta especificada) que corresponda ao conjunto. A sintaxe é:
for /D {%% | %}variável in (conjunto) do comando [opções_da_linha_de_comando]
- Recursiva
Percorre a árvore de pasta com raiz em [unidade:]caminho, executando a instrução for em cada pasta da árvore. Se nenhuma pasta for especificada após /R, a pasta atual será usada. Se conjunto for somente um ponto (.), ele apenas enumerará a árvore de pastas. A sintaxe é:
for /R [[unidade :]caminho] {%% | %}variável in (conjunto) do comando [opções_da_linha_de_comando]
- Iterando um intervalo de valores
Utilize uma variável iterativa para definir o valor inicial (início) e, depois, avançar por um intervalo definido de valores até que o valor exceda o valor final definido (fim). /L executa a iteratividade comparando início com fim. Se início for menor que fim o comando será executado. Quando a variável iterativa excede o fim, o shell do comando sai do loop. Você também pode usar uma etapa negativa para avançar por 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 é:
for /L {%% | %}variável in (início,etapa,fim) do comando [opções_da_linha_de_comando]
- Iterando e analisando arquivos
Utilize a análise de arquivos para processar saída de comando, sequências de caracteres e conteúdo de arquivos. Use as variáveis iterativas para definir o conteúdo ou as sequências de caracteres que deseja examinar e use as várias opções de palavras-chave_de_análise para modificar mais ainda a análise. Use a opção de símbolo das palavras-chave_de_análise para especificar quais símbolos devem ser passados como variáveis do iterador. Observe que, quando usado sem a opção de símbolo, /F examinará apenas o primeiro símbolo.
A análise de arquivo consiste na leitura da saída, sequência de caracteres ou conteúdo do arquivo, dividindo-o em linhas individuais de texto e, em seguida, analisando cada linha em zero ou mais símbolos. O loop de for é então chamado com o valor de variável do iterador definido para o símbolo. Por padrão, /F passa o primeiro símbolo separado por espaço a partir de cada linha de cada arquivo. As linhas em branco são ignoradas. As diversas sintaxes são:
for /F ["palavras-chave_de_análise"] {%% | %}variável in (conjunto_de_arquivos) do comando [opções_da_linha_de_comando]
for /F ["palavras-chave_de_análise"] {%% | %}variável in ("sequência_literal") do comando [opções_da_linha_de_comando]
for /F ["palavras-chave_de_análise"] {%% | %}variável in ('comando') do comando [opções_da_linha_de_comando]
O argumento conjunto_de_arquivos especifica um ou mais nomes de arquivo. Cada arquivo será aberto, lido e processado antes de ir para o próximo arquivo do conjunto_de_arquivos. Para ignorar o comportamento de análise padrão, especifique "palavras-chave_de_análise". Essa é uma sequência de caracteres entre aspas que contém uma ou mais palavras-chave para especificar diferentes opções de análise.
Se você usar a opção usebackq, utilize uma das seguintes sintaxes:
for /F ["usebackqpalavras-chave_de_análise"] {%% | %}variável in ("conjunto_de_arquivos") do comando [opções_da_linha_de_comando]
for /F ["usebackqpalavras-chave_de_análise"] {%% | %}variável in ('sequência_literal') do comando [opções_da_linha_de_comando]
for /F ["usebackqpalavras-chave_de_análise"] {%% | %}variável in (`comando`) do comando [opções_da_linha_de_comando]
A tabela abaixo lista as palavras-chave de análise que podem ser usadas para palavras-chave_de_análise.
Palavra-chave Descrição eol=c Especifica um caractere de fim de linha (apenas um caractere). skip=n Especifica o número de linhas que devem ser ignoradas no início de cada arquivo. delims=xxx Especifica um conjunto delimitador. Isso substitui o conjunto delimitador padrão de espaço e tabulação. tokens=x,y,m-n Especifica quais símbolos de cada linha deverão ser passados para o corpo de for para cada iteração. Como resultado, são alocados nomes de variáveis adicionais. A forma m-n é um intervalo, especificando o mésimo até o nésimo símbolo. Se o último caractere na sequência tokens= for um asterisco (*), uma variável adicional será alocada e receberá o texto restante na linha após o último símbolo analisado. usebackq Especifica que aspas podem ser usadas para citar nomes de arquivos em conjunto_de_arquivos, uma sequência de caracteres entre aspas é executada como um comando e uma sequência de caracteres entre aspas simples é um comando de sequência literal. - Substituição de variável
Os modificadores de substituição para referências das variáveis de for foram aprimorados. A tabela abaixo lista sintaxe opcional (para qualquer variável I):
Variável com modificador Descrição %~I Expande %I que remove as aspas delimitadoras (""). %~fI Expande %I para um nome de caminho totalmente qualificado. %~dI Expande %I para somente uma letra de unidade. %~pI Expande %I para somente um caminho. %~nI Expande %I para somente um nome de arquivo. %~xI Expande %I para somente uma extensão de arquivo. %~sI Expande o caminho para conter somente nomes curtos. %~aI Expande %I para os atributos do arquivo. %~tI Expande %I para a data e hora do arquivo. %~zI Expande %I para o tamanho do arquivo %~$PATH:I Pesquisa as pastas listadas na variável de ambiente PATH e expande %I para o nome totalmente qualificado do primeiro nome encontrado. Se o nome da variável de ambiente não estiver definido ou o arquivo não for localizado pela pesquisa, esse modificador será expandido para a sequência vazia. A tabela abaixo lista as combinações de modificadores que podem ser usadas para obter resultados compostos.
Variável com modificadores combinados Descrição %~dpI Expande %I para somente uma letra de unidade e um caminho. %~nxI Expande %I para somente um nome de arquivo e extensão. %~fsI Expande %I para um nome de caminho completo somente com nomes curtos. %~dp$PATH:I Pesquisa as pastas listadas na variável de ambiente PATH %I e expande para a letra de unidade e para o caminho do primeiro nome encontrado. %~ftzaI Expande %I para uma linha de saída semelhante a dir. Nos exemplos acima, %I e PATH podem ser substituídos por outros valores válidos. Um nome de variável for válido finaliza a sintaxe %~.
Usar nomes de variáveis em letras maiúsculas, como %I, pode tornar o código mais legível e evitar confusão com modificadores, que não diferenciam maiúsculas de minúsculas.
- Somente pastas
- Analisando uma sequência de caracteres
Você pode usar a lógica de análise for /F em uma sequência de caracteres imediata, delimitando o conjunto_de_arquivos por aspas simples, dentro dos parênteses. O conjunto_de_arquivos será tratado como uma única linha de entrada de um arquivo e será analisado.
- Analisando saída
Você pode usar o comando for /F para analisar a saída de um comando tornando o conjunto_de_arquivos entre parênteses uma sequência de caracteres delimitada por aspas. Ele será tratado como uma linha de comando, que será passada para um Cmd.exe filho e a saída será capturada na memória e analisada como se fosse um arquivo.
Exemplos
Para usar for em um arquivo em lotes, utilize a seguinte sintaxe:
for %%variável in (conjunto) do comando [opções_da_linha_de_comando]
Para mostrar o conteúdo de todos os arquivos da pasta atual que tenham a extensão .doc ou .txt usando a variável substituível %f, digite:
for %f in (*.doc *.txt) do type %f
Nesse exemplo, cada arquivo que tenha a extensão .doc ou .txt na pasta atual é substituído pela variável %f até o conteúdo de todos os arquivos ser exibido. Para usar este comando em um arquivo em lotes, substitua todas as ocorrências de %f por %%f. Caso contrário, a variável será ignorada e uma mensagem de erro será mostrada.
Para analisar um arquivo ignorando linhas comentadas, digite:
for /F "eol=; tokens=2,3* delims=," %i in (meuarq.txt) do @echo %i %j %k
Esse comando analisa cada linha de meuarq.txt, ignorando linhas que comecem com um ponto-e-vírgula, passando o segundo e terceiro símbolo de cada linha para o corpo de FOR (os símbolos são delimitados por vírgulas ou espaços). O corpo da instrução FOR faz referência a %i para obter o segundo símbolo, %j para obter o terceiro símbolo e %k para obter todos os símbolos restantes. Se os nomes de arquivo fornecidos contiverem espaços, delimite o texto por aspas (por exemplo, "nome do arquivo"). Para usar aspas, você deve usar usebackq. Caso contrário, as aspas serão interpretadas como definidoras de uma sequência de caracteres literal a ser analisada.
%i é explicitamente declarado na instrução FOR, e %j e %k são implicitamente declarados usando tokens=. Você pode especificar até 26 símbolos usando tokens=, contanto que não provoque uma tentativa de declarar uma variável maior que a letra 'z' ou 'Z'.
Para analisar a saída de um comando colocando conjunto_de_arquivos entre parênteses, digite:for /F "usebackq delims==" %i IN (`conjunto`) DO @echo %i
Esse exemplo enumera os nomes de variáveis de ambiente no ambiente atual.XOX