usando FORFILES em lote para excluir arquivos tmp e bak com mais de uma semana

3

Estou tendo problemas para fazer com que essa sintaxe funcione corretamente. O que eu gostaria de fazer é remover todos os arquivos tmp e bak do diretório especificado e todos os subdiretórios se a data da modificação tiver mais de 7 dias.

for %G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%G -d -7 -c "cmd /c del @path"

Minha sintaxe foi coletada de esta pergunta do StackOverflow .

Se eu alterar minha máscara de pesquisa para incluir apenas uma extensão desejada, obtenho resultados corretos.

forfiles -p "c:\test\cad projects" -s -m *.bak -d -7 -c "cmd /c del @path"

Eu não faço muito com arquivos em lote, então eu esperava que alguém pudesse ajudar. Obrigado pela leitura.

    
por TWood 26.09.2013 / 21:35

2 respostas

5

Se você estiver executando isso no console, isso deve funcionar. Se você estiver salvando isso em um arquivo .bat , o formato das variáveis será um pouco diferente. Você tem que usar dois sinais de porcentagem para indicar uma variável. Então, seu comando então se tornaria ...

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%%G -d -7 -c "cmd /c del @path"

O artigo KB75634 da Microsoft explica por que isso acontece.

If there are no characters between the two percent signs, one percent sign is stripped off and the other will remain. This is why a FOR command that echos the name of each file with a .COM extension would be

FOR %V IN (*.COM) DO ECHO %V

but if the same command is placed in a batch file, the following is required:

FOR %%V IN (*.COM) DO ECHO %%V
    
por 26.09.2013 / 21:41
0

Bem, eu não li com bastante atenção na sintaxe do FOR / R. Eu estava perdendo um%. Meu código acima teria funcionado na linha de comando. De um lote, ele falhou por causa da falta do%.

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m
*%%G -d -7 -c "cmd /c del @path"
    
por 26.09.2013 / 21:43

Tags