Como usar o arquivo em lote For Loop no Windows

Um arquivo de lote é um arquivo de texto simples que contém uma série de comandos a serem executados sequencialmente pelo Prompt de Comando no Windows. Os arquivos de lote podem ser usados para automatizar tarefas repetitivas, executar programas ou realizar operações de arquivos e pastas.

Um recurso importante dos arquivos em lote é a capacidade de criar loops, que é a repetição de determinados comandos para cada elemento em um conjunto de dados. Ao usar loops, você pode economizar tempo e esforço ao escrever e executar arquivos em lote.

Neste artigo, explicaremos como usar arquivos batch for loop no Windows, incluindo sintaxe, exemplos e dicas úteis. Também abordaremos algumas variações do loop for, como for /f, for /r e for /d, que podem ser usadas para processar arquivos de texto, subpastas ou diretórios. Depois de ler este artigo, você poderá criar arquivos em lote mais eficientes e flexíveis usando loops for.

coding

O que é Batch File For Loop?

Um arquivo batch for loop é uma estrutura de controle que permite a execução de um comando específico para cada elemento de um conjunto de dados. O conjunto de dados pode ser uma lista de valores, um intervalo de números ou o resultado de outro comando.

Os comandos executados pelo loop for são chamados de blocos de comando e podem consistir em uma ou mais linhas. Para cada iteração do loop, o valor atual do elemento será armazenado em uma variável, que pode ser usada no bloco de comandos.

A sintaxe básica de um arquivo de lote de loop for é a seguinte:

FOR %%parameter IN (set) DO command

Onde:

  • O %%parameter é uma variável que armazena o valor atual do elemento. Essa variável deve ser prefixada com dois sinais de porcentagem (%%) se for usada em um arquivo em lote, ou com um sinal de porcentagem (%) se for usada diretamente no prompt de comando.
  • (Um conjunto é uma coleção de dados a ser processada por um loop. Esse conjunto pode ser uma lista de valores separados por espaços, vírgulas ou ponto e vírgula, ou um intervalo de números especificado com o formato  (start,step,end). Esse conjunto também pode ser o resultado de outro comando entre aspas simples (‘), como  ‘dir /b’  ou  ‘type file.txt’.
  • comando é o comando a ser executado para cada elemento do conjunto. Esse comando pode ser um comando interno ou externo, um arquivo em lote ou uma lista de comandos. A variável %%parameter% pode ser usada nesse comando para se referir ao valor atual do elemento. Se o comando consistir em mais de uma linha, deverá ser colocado entre parênteses (( e )).

Exemplo:

FOR %%A IN (1 2 3) DO ECHO %%A

O comando acima exibirá os números 1, 2 e 3 sequencialmente na tela.

FOR %%B IN (1,2,10) DO ECHO %%B

O comando acima exibirá os números 1, 3, 5, 7 e 9 sequencialmente na tela. Isso ocorre porque o intervalo de números  (1,2,10)  significa começar em 1 e aumentar em 2 a cada etapa, até um máximo de 10.

FOR %%C IN ('dir /b *.txt') DO TYPE %%C

O comando acima exibirá o conteúdo de todos os arquivos de texto presentes no diretório atual.

Como usar o Batch File For Loop para processar arquivos e pastas?

Um dos usos comuns do arquivo em lote para loops é processar arquivos e pastas em massa. Por exemplo, talvez você queira renomear, excluir ou mover vários arquivos ou pastas em um padrão específico. Para fazer isso, você pode usar algumas das opções adicionais disponíveis para loops for, como:

  • /F para processar arquivos de texto ou resultados de outros comandos.
  • /R para processar subpastas de forma recursiva.
  • /D para processar apenas diretórios.

Aqui está a sintaxe do arquivo em lote do loop for com essas opções adicionais:

FOR /F ["options"] %%parameter IN (set) DO command

Onde:

  • [“options”] são opções adicionais que podem ser usadas para controlar como o loop for processa arquivos de texto ou resultados de comandos. Algumas opções comumente usadas são:
FOR /R [[drive:]path] %%parameter IN (set) DO command

Onde:

  • [[drive:]path] é o diretório inicial a ser processado pelo loop. Se não for especificado, será usado o diretório atual.
  • (set) é o conjunto de arquivos a ser processado pelo loop. Esse conjunto deve ser um padrão de correspondência de arquivos (file globbing), como  *.txt  ou  ?.bat. Se esse conjunto estiver vazio, todos os arquivos serão processados.
FOR /D %%parameter IN (set) DO command

Onde:

  • (set) é o conjunto de diretórios a serem processados pelo loop. Esse conjunto deve ser um padrão de correspondência de arquivos (file globbing), como  * ou ? Se esse conjunto estiver vazio, todos os diretórios serão processados.

Exemplo:

FOR /F "skip=1 delims=," %%A IN (data.csv) DO ECHO %%A

O comando acima pulará a primeira linha do arquivo data.csv, que normalmente contém os títulos das colunas, e exibirá o valor da primeira coluna de cada linha subsequente, separada por vírgulas.

FOR /F "tokens=1,2* usebackq" %%A IN ("file name.txt") DO ECHO %%A %%B %%C

O comando acima processará um arquivo de texto cujo nome contém espaços e exibirá o primeiro, o segundo e os valores restantes da coluna de cada linha, separados por espaços ou tabulações.

FOR /R C:\Users\ %%D IN (*.jpg) DO COPY %%D D:\Backup\

O comando acima procurará todos os arquivos com a extensão .jpg no diretório C:\Users\ e seus subdiretórios e os copiará para o diretório D:\Backup.

FOR /D %%E IN (*) DO RMDIR /S /Q %%E

O comando acima excluirá todos os diretórios e seus conteúdos no diretório atual.

Como usar o Batch File For Loop para acessar informações de arquivos e pastas?

Além de processar arquivos e pastas com o arquivo em lote para loop, você também pode acessar informações sobre eles, como nome, extensão, tamanho, data de modificação, atributos e caminho.

Para fazer isso, você pode usar modificadores de caminho em variáveis de loop. Um modificador de caminho é um caractere especial que pode ser adicionado após o sinal de porcentagem (%) em uma variável de loop para alterar o valor dessa variável.

Aqui estão algumas modificações de caminho comumente usadas:

  • %~fparameter para exibir o caminho completo de um arquivo ou pasta.
  • %~nparameter` para exibir nomes de arquivos ou pastas sem extensões.
  • %~xparameter para exibir extensões de arquivos ou pastas.
  • %~sparameter para exibir o caminho curto de um arquivo ou pasta, o que é útil se o caminho contiver espaços.
  • %~zparameter para exibir o tamanho do arquivo ou da pasta em bytes.
  • %~tparameter para exibir a data e a hora da modificação do arquivo ou da pasta.
  • %~aparameter para exibir atributos de arquivos ou pastas, como R (somente leitura), H (oculto), S (sistema) etc.

Exemplo:

FOR %%F IN (*.txt) DO ECHO %%F %%~nF %%~xF %%~sF %%~zF %%~tF %%~aF

O comando acima exibirá informações sobre todos os arquivos de texto no diretório atual, como nome, extensão, caminho curto, tamanho, data de modificação e atributos.

Como usar o For Loop do arquivo em lote para criar caminhos relativos?

Um dos desafios que você pode enfrentar ao usar um arquivo em lote para loop é como criar um caminho relativo do arquivo ou pasta processado pelo loop. Um caminho relativo é um caminho que não contém o nome da unidade ou do diretório inicial, mas apenas uma parte de um caminho diferente do diretório atual.

Por exemplo, se o diretório atual for C:\Users\Alice\Documents, então o caminho relativo do arquivo C:\Users\Alice\Pictures\image.jpg é …\Pictures\image.jpg.Por exemplo, se o diretório atual for C:\Users\Alice\Documents, então o caminho relativo do arquivo C:\Users\Alice\Pictures\image.jpg é …\Pictures\image.jpg.

A criação de caminhos relativos pode ser útil se você quiser mover, copiar ou renomear arquivos ou pastas para um local diferente, mas manter a estrutura de diretórios original. Por exemplo, você pode querer mover todos os arquivos de texto do diretório C:\Users\Alice\Documents e seus subdiretórios para o diretório D:\Backup, mas manter os subdiretórios.

Para criar caminhos relativos com arquivos batch for loop, você pode usar algumas das técnicas a seguir:

  • Usa a variável de ambiente “CD” para obter o diretório atual e a remove do caminho completo do arquivo ou da pasta usando o comando “SET”.
  • Use a opção /V:ON para ativar a expansão de variável atrasada e use um ponto de exclamação (!) como delimitador de variável em vez de um sinal de porcentagem (%). Isso é útil se você quiser alterar o valor de uma variável em um loop.
  • Usa os comandos “PUSHD” e “POPD” para alterar o diretório atual durante o loop e usa um ponto (.) para se referir ao diretório atual.

Exemplo:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R C:\Users\Alice\Documents %%G IN (*.txt) DO (
  SET "source=%%G"
  SET "destination=!source:%CD%=!"
  ECHO !destination!
)
ENDLOCAL

O comando acima procurará todos os arquivos de texto no diretório C:\Users\Alice\Documents e seus subdiretórios e exibirá seus caminhos relativos a partir do diretório atual. Por exemplo, se o diretório atual for C:\Users\Alice\Documents, então o caminho relativo do arquivo C:\Users\Alice\Documents\Folder1\File1.txt é Folder1\File1.txt.

@ECHO OFF
FOR /R C:\Users\Alice\Documents %%H IN (*.txt) DO (
  PUSHD "%%~dpH"
  SET "source=%%H"
  SET "destination=%CD%\%%~nxH"
  ECHO %destination%
  POPD
)

O comando acima procurará todos os arquivos de texto no diretório C:\Users\Alice\Documents e seus subdiretórios e exibirá o caminho completo usando o diretório atual como prefixo. Por exemplo, se o diretório atual for D:\Backup, então o caminho completo do arquivo C:\Users\Alice\Documents\Folder1\File1.txt é D:\Backup\Folder1\File1.txt.

Conclusão

O loop for do arquivo de lote é um recurso muito útil para criar arquivos de lote mais eficientes e flexíveis. Ao usar um loop for, você pode repetir um comando específico para cada elemento de um conjunto de dados, como uma lista de valores, um intervalo de números ou o resultado de outro comando.

Você também pode usar algumas das opções adicionais disponíveis para loops for, como /F, /R e /D, para processar arquivos de texto, subpastas ou diretórios. Além disso, você também pode acessar informações sobre os arquivos e pastas processados pelo loop, como nome, extensão, tamanho, data de modificação, atributos e caminho, usando a modificação de caminho nas variáveis de loop.

Por fim, você também pode criar um caminho relativo dos arquivos e pastas processados pelo loop, usando várias técnicas, como remover o diretório atual do caminho completo, ativar a expansão retardada de variáveis ou alterar o diretório atual durante o loop.

Esperamos que este artigo seja útil para aqueles que desejam saber mais sobre arquivos em lote para loops no Windows. Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo. Obrigado pela leitura.

Últimos artigos