Excluir conjunto de arquivos usando o comando find

3

Antecedentes

Exclua um conjunto de arquivos espalhados por diferentes diretórios.

Problema

O código a seguir não funciona (o | sem escape causa problemas);

for %i in (dir /s/b | find "lock") do echo del %i

Pergunta

Sem gravar um arquivo de lote, como você excluiria todos os arquivos chamados "lock" (isto é, encontrados usando o comando find ) no diretório atual e em todos os subdiretórios (incluindo diretórios ocultos)?

Obrigado!

    
por Dave Jarvis 17.12.2012 / 22:15

4 respostas

4

Seu código precisa de alguns retoques. O operador de pipe precisa ser escapado pelo caractere de escape de lote ^ e, ao usar aspas entre parênteses para um comando, a opção usebackq deve ser especificada.

for /?

Formato de lote:

for /f "usebackq" %%i in ('dir /s /b ^| find "lock"') do echo %%i

Formato da linha de comando:

for /f "usebackq" %i in ('dir /s /b ^| find "lock"') do echo %i

Substitua echo por del e qualquer uma das suas opções quando quiser realmente excluir os arquivos. Observe que os sinais percentuais duplos são necessários quando usados em um arquivo bat, único quando usados diretamente na linha de comando.

Outro método é usar o comando forfiles . forfiles /?

forfiles /m *lock* /s /c "cmd /c echo @file"

Observação , ambos os métodos também excluirão as pastas que contiverem o termo de pesquisa lock . Passos adicionais seriam necessários para evitar isso.

    
por 17.12.2012 / 23:03
2

Para uma determinada unidade e / ou caminho (também aparece nas subpastas):

del /f /s /q c:\windows\lock
    
por 17.12.2012 / 22:20
1

Outra opção seria usar diretamente o comando del da seguinte forma:

del /s c:\directory\*_gdiplus*.*

onde "_gdiplus", por exemplo, é o nome do arquivo que contém a string que você deseja excluir.

    
por 14.06.2016 / 12:34
0

david-ruhmann resposta não funciona com caminho contendo espaços! Você pode usar:

for /f "usebackq delims=" %i in ('dir /s /b ^| find "lock"') do del "%i" 

Se você tiver arquivos hinned você pode usar:

for /f "usebackq delims=" %i in ('dir /s /b /a ^| find "lock"') do del "%i" /A:H
    
por 12.11.2015 / 15:58