Use Forfiles para processar arquivos com base na idade

É sempre bom conhecer alguma mágica da linha de comando, pois às vezes é mais fácil processar comandos dessa maneira.

Este guia demonstra o comando Forfiles no Windows Vista e no Windows 7 (atualização: também disponível em versões mais recentes do Windows).

Os forfiles podem processar arquivos com base em nomes, extensões e idade. Por exemplo, é possível encontrar todos os documentos em um diretório com mais de 20 dias ou todos os documentos em c: \ documentos que foram alterados desde uma data específica.

O comando forfiles pode ser associado às opções de processamento para excluir esses arquivos ou criar uma lista de todos os arquivos que correspondem aos filtros. Vamos dar uma olhada no comando forfiles.

FORFILES [/ P nome do caminho] [/ M máscara de pesquisa] [/ S] [/ comando C] [/ D [+ | -] dd / MM / aaaa]

Descrição: seleciona um arquivo (ou conjunto de arquivos) e executa um comando nesse arquivo. Isso é útil para trabalhos em lotes.

Lista de parâmetros:

  • / P nome do caminho Indica o caminho para iniciar a pesquisa. A pasta padrão é o diretório de trabalho atual (.).
  • / M searchmask Pesquisa arquivos de acordo com uma máscara de pesquisa. A máscara de pesquisa padrão é '*'.
  • / S Instrui os forfiles a recursarem em subdiretórios. Como "DIR / S".
  • / C command Indica o comando a ser executado para cada arquivo. As cadeias de comando devem estar entre aspas duplas. O comando padrão é "cmd / c echo @file".

As seguintes variáveis ​​podem ser usadas na cadeia de comandos:

  • @file - retorna o nome do arquivo.
  • @fname - retorna o nome do arquivo sem extensão.
  • @ext - retorna apenas a extensão do arquivo.
  • @caminho - retorna o caminho completo do arquivo.
  • @relpath - retorna o caminho relativo do arquivo.
  • @isdir - retorna "TRUE" se um tipo de arquivo é um diretório e "FALSE" para arquivos.
  • @fsize - retorna o tamanho do arquivo em bytes.
  • @fdate - retorna a data da última modificação do arquivo.
  • @ftime - retorna a hora da última modificação do arquivo.

Para incluir caracteres especiais na linha de comando, use o código hexadecimal para o caractere no formato 0xHH (por exemplo, 0x09 para a guia). Os comandos internos do CMD.exe devem ser precedidos por "cmd / c".

/ D date Seleciona arquivos com uma data da última modificação maior ou igual a (+) ou menor ou igual a (-), a data especificada usando o formato "dd / MM / aaaa"; ou seleciona arquivos com uma data da última modificação maior ou igual a (+) a data atual mais dias "dd" ou menor ou igual a (-) a data atual menos dias "dd". Um número "dd" válido de dias pode ser qualquer número no intervalo de 0 a 32768. "+" é considerado como sinal padrão, se não for especificado.

/? Exibe esta mensagem de ajuda. Esse arquivo de ajuda pode ser aberto digitando o comando forfiles /? em um prompt de comando. Pressione Windows-R, digite cmd e pressione enter para iniciar a linha de comando no Windows.

O comando forfiles /P c:\test\ /M .doc /S /D -10 pesquisa o diretório c: \ test e todos os seus subdiretórios em busca de arquivos com a extensão .doc com mais de 10 dias.

O parâmetro / p seguido por um diretório define o diretório inicial, / s inclui subdiretórios na pesquisa, / m filtra os arquivos e pastas com base na string inserida e / D define a data ou um período de tempo.

O comando / C é usado para processar os arquivos encontrados mais adiante. Por exemplo, ele pode ser usado para executar o seguinte comando: /C "cmd /c echo @fname" > test.txt ecoa os nomes de cada arquivo encontrado e salva os resultados em text.txt no mesmo diretório.

O comando completo se parece com este forfiles /P c:\test\ /M .doc /S /D -10 /C "cmd /c echo @fname" > test.txt

Outra possibilidade é excluir os arquivos que correspondem à pesquisa, isso é feito com o comando /C "cmd /c del @File

No entanto, é recomendável testar a saída primeiro, antes de emitir o comando delete para garantir que apenas os arquivos corretos sejam excluídos. Usuários experientes podem criar um arquivo em lotes para executar forfiles regularmente.