PowerShell para excluir todos os arquivos com uma certa extensão de arquivo


21

Desejo verificar um diretório (não há subs) e excluir qualquer arquivo com uma extensão .avi . Tentei esta sintaxe, mas nenhum erro é gerado e nenhum arquivo é excluído. Este é o código que eu tentei

get-childitem 'C:\Users\ramrod\Desktop\Firefly' -include *.avi | foreach ($_) {remove-item $_.fullname}

O que deve ser alterado para excluir todos os .aviarquivos da pasta?


3
O que impede você de usar rm *.avi? (Sim, isso é uma sintaxe válida do PowerShell, porque rmé um alias de del.
GiantTree 20/16

2
Tecnicamente, rme delsão ambos os aliases do Remove-Itemcmdlet.
root

Respostas:


15

Use del *.<extension>ou um dos seus pseudônimos (como rmse você estiver mais acostumado com o bash).

Portanto, seria del *.avipara excluir todos os arquivos que terminam no .avidiretório de trabalho atual.

Use del <directory>\*.<extension>para excluir arquivos em outros diretórios.


14
Para fazer isso recursivamentels *.avi -Recurse | foreach {rm $_}
Kolob Canyon

11

Supondo que o método preferido de abrir uma instância do Powershell no diretório, uma versão genérica seria a seguinte:

Get-ChildItem *.avi | foreach { Remove-Item -Path $_.FullName }

Para uma versão específica do diretório:

Get-ChildItem -Path 'C:\Users\ramrod\Desktop\Firefly' *.avi | foreach { Remove-Item -Path $_.FullName }

Adicionar em -Recurseque Get-ChildItema afetar todas as pastas contidas.

Exemplo:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }

2

O Remove-Itemcommandlet deve ser tudo o que você precisa. Basta passar a pasta raiz onde os arquivos avi existem e passar a recursebandeira junto com um filtro:

Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -recurse -Include *.avi

Isso deve ser executado mais rapidamente do que encontrar os arquivos Get-ChildIteme chamar Remove-Itemcada um deles.

A adição da -WhatIfopção solicitará que você exclua cada arquivo, o que é mais seguro para as pessoas menos confortáveis ​​com o PowerShell.


11
Não sei por que essa resposta recebeu uma votação negativa. O -WhatIfinterruptor é desnecessário. Enviei uma edição para esta resposta. +1 O Remove-Itemcommandlet é tudo o que você precisa e é executado mais rapidamente que a resposta atualmente aceita.
Greg Burghardt 17/01

É uma boa ideia usar -whatifpara verificar se você removerá apenas os arquivos que deseja remover. E, especialmente, ao oferecer um comando de exclusão para aqueles de conhecimento técnico desconhecido. Melhor manter as rodinhas.
Keith Miller

0

Suponha que haja vários arquivos de texto no diretório atual.
dir * -include *.txt& dir *.txttrabalho como esperado, mas dir -include *.txtnão dá nada. O motivo está bem explicado no Stack Overflow .

Comando corrigido:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}


0

Isso finalmente fez isso por mim - tentei tudo acima e nada.

get-childitem "<drive>:\<folder>" -recurse -force -include *.<ext> | remove-item -force

Certifique-se de que duas forças não são necessárias, mas é isso que está funcionando.


0

tente isso

Remove-Item "c:\temp\*.txt" 

11
Ei, isso não parece remover arquivos AVI, nem parece fazê-lo da pasta em questão. Você poderia melhorar essa resposta ou explicar como isso pode ajudar nessa situação?
Sirex
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.