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.