Powershell per eliminare tutti i file con una determinata estensione


21

Voglio scansionare una directory (non ci sono sottotitoli) ed eliminare qualsiasi file con estensione .avi Ho provato questa sintassi, ma non vengono generati errori e non vengono eliminati file. Questo è il codice che ho provato

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

Cosa dovrebbe essere modificato per eliminare tutti i .avifile dalla cartella?


3
Cosa ti impedisce di usare rm *.avi? (Sì, questa è sintassi di PowerShell valida perché rmè un alias di del.
GiantTree

2
Tecnicamente rme delsono entrambi alias del Remove-Itemcmdlet.
radice

Risposte:


15

Usa del *.<extension>o uno dei suoi alias (tipo rm, se sei più abituato a colpire).

Quindi sarebbe del *.avieliminare tutti i file che finiscono nella .avidirectory di lavoro corrente.

Utilizzare del <directory>\*.<extension>per eliminare i file in altre directory.


14
Per fare questo in modo ricorsivols *.avi -Recurse | foreach {rm $_}
Kolob Canyon,

11

Supponendo che il metodo preferito per aprire un'istanza di Powershell nella directory, una versione generica sarebbe la seguente:

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

Per una versione specifica della directory:

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

Aggiungi -Recursea Get-ChildItemper influire su tutte le cartelle contenute.

Esempio:

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

2

Il Remove-Itemcommandlet dovrebbe essere tutto ciò di cui hai bisogno. Basta passare la cartella principale in cui esistono i file avi e passare il recurseflag insieme a un filtro:

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

Ciò dovrebbe essere eseguito più rapidamente rispetto alla ricerca dei file Get-ChildIteme alla loro invocazione Remove-Item.

L'aggiunta dello -WhatIfswitch ti chiederà prima di eliminare ogni file, il che è più sicuro per le persone meno a loro agio con PowerShell.


1
Non sono sicuro del perché questa risposta abbia ottenuto un voto negativo. L' -WhatIfinterruttore non è necessario. Ho inviato una modifica a questa risposta. +1 Il Remove-Itemcommandlet è tutto ciò che serve e funziona più velocemente della risposta attualmente accettata.
Greg Burghardt,

È una buona idea utilizzare -whatifper verificare che rimuoverai solo i file che desideri rimuovere. E soprattutto quando offri un comando di cancellazione a quelli con competenze tecniche sconosciute. Meglio tenere le ruote per l'allenamento.
Keith Miller,

0

Supponiamo che ci siano diversi file di testo nella directory corrente.
dir * -include *.txte dir *.txtfunziona come previsto ma dir -include *.txtnon dà nulla. Il motivo è ben spiegato su StackTranslate.it .

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


0

Questo alla fine lo ha fatto per me - provato tutto sopra e nada.

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

sicuramente non è richiesto l'uso di due forze, ma questo è ciò che funziona, quindi è ciò a cui mi attengo.


0

prova questo

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

1
hey lì, questo non sembra rimuovere i file avi, e non sembra nemmeno farlo dalla cartella in questione. Potresti migliorare questa risposta o spiegare come potrebbe essere d'aiuto in questa situazione?
Sirex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.