Excluindo todos os arquivos que não correspondem a um determinado padrão - linha de comando do Windows

12

Excluir itens por meio da linha de comando é bastante fácil.

del /options filename.extension

Agora, suponha que eu queira excluir todos os arquivos que não terminem com .jpg em uma pasta, como eu faria isso.

O problema é que tenho um software que converte todas as imagens especificadas em .jpg, mas deixa os originais, dos quais não preciso mais.

Seria muito mais eficiente executar uma única instrução, em comparação com executar várias instruções para cada tipo de arquivo diferente.

KdgDev
fonte

Respostas:

14

Eu faria assim:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Isso primeiro tornará todos os arquivos JPG somente leitura, excluirá todo o resto (ele ignorará automaticamente os arquivos somente leitura) e depois tornará os arquivos JPG graváveis ​​novamente.

bobbymcr
fonte
Trabalhou como um campeão. Nota: basta adicionar /sa cada linha para incluir recursivamente os arquivos nos subdiretórios.
Chuck Wilbur
9

Isso é realmente muito fácil.

Você precisará forpercorrer os arquivos e simplesmente procurar a extensão:

for %f in (*) do if not %~xf==.jpg del "%f"

deve fazer o truque (código aqui ).

Joey
fonte
obrigado, mas só isso depende do mapa que estou usando.
KdgDev
4
Mapa?
3128 Joey
Como digo se não .jpg e não .jsp e não .xml, então del?
user1164061
1

PowerShell to the rescue
Nos tempos do Windows 7/8, é o sucessor da boa e velha linha de comando

Del C:\myFolder\* -exclude '*.jpg'

Delé um alias para Remove-Item. Possui várias opções, como recursar, incluir, excluir e filtrar (use isso para RegEx)

Você precisa adicionar \*para incluir arquivos em uma determinada pasta

nixda
fonte
No prompt do CMD, isso deve funcionar:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi
Nota: O PowerShell vem com o Win 7/8. Para Windows XP ou Vista, você precisa fazer o download e instalá-lo.
Iszi 23/09
1

Sei que não está respondendo diretamente à sua pergunta, mas você examinou as opções no seu conversor para ver se:

  1. Pode excluir os originais em si

ou

  1. Escreva os .jpg em uma nova pasta?
ChrisF
fonte
Não tenho a opção direta de fazê-lo. O que ele fará é sobrescrever o original, se fosse um JPG, para começar. Mas todos os outros permanecem no disco enquanto um JPG é criado.
KdgDev
@WebDevHobo - oh, bem, eu iria com a sugestão de Johannes então.
ChrisF
0

Eu estava procurando uma maneira de encontrar todos os arquivos que NÃO tinham a extensão ".mp3" em um diretório TREE no Windows 7 (volume NTFS) contendo talvez 20.000 arquivos em várias centenas de diretórios de várias profundidades ... então, depois de um pouco de angústia, eu usei:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

isso listou os arquivos que não corresponderam ao arquivo .mp3 após remover tudo relacionado à saída do comando DIR ... 99% funciona ... a menos que o arquivo que não corresponda seja nomeado como uma das palavras-chave na saída DIR padrão - talvez haja uma maneira de fazer com que o DIR relate menos informações de cabeçalho / resumo - mas não me incomodei, pois isso ocorreu na maior parte do caminho.

CaptPat
fonte
aparentemente o código de postagem aqui retira alguns caracteres especiais ... então o comando "cd" acima estava em uma linha por si só e especificou o diretório raiz de destino, e o primeiro comando "find" removeu todas as linhas que continham "<" DIR "> "(figura go) já que é a saída do comando dir - mas o código post aqui pode pensar que é uma espécie de meta-instrução e retira-lo ...
CaptPat
1
Existe uma maneira muito mais fácil de fazer isso: a /bbandeira do dircomando. dir /blistará nomes de arquivos e extensões apenas no diretório atual, dir /s /blistará os nomes completos de todos os arquivos nos subdiretórios atual e em todos os. Tubulação para em find /vvez de um forloop é um toque agradável que vou ter que lembrar, mas acho que não funciona del.
22412 Bob
0

Outra maneira de excluir todos os arquivos correspondentes a um nome de arquivo é mostrada abaixo. A lista de loop for é todos os arquivos e o if NOT corresponde ao nome do arquivo (sem o nome do diretório).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
ajuffinger
fonte