Powershell para eliminar todos los archivos con una determinada extensión de archivo

21

Quiero escanear un directorio (no hay subs) y eliminar cualquier archivo con una extensión de .avi Probé esta sintaxis, pero no se arrojan errores y no se eliminan archivos. Este es el código que probé

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

¿Qué se debe modificar para eliminar todos los .aviarchivos de la carpeta?

usuario2676140
fuente
3
¿Qué te impide usar rm *.avi? (Sí, esa es una sintaxis válida de PowerShell porque rmes un alias de del.
GiantTree
2
Técnicamente, rmy delson ambos alias del Remove-Itemcmdlet.
raíz

Respuestas:

15

Use del *.<extension>o uno de sus alias (como rm, si está más acostumbrado a golpear).

Por lo tanto, sería del *.avieliminar todos los archivos que terminan .avien el directorio de trabajo actual.

Se usa del <directory>\*.<extension>para eliminar archivos en otros directorios.

Árbol Gigante
fuente
14
Para hacer esto de forma recursivals *.avi -Recurse | foreach {rm $_}
Kolob Canyon
11

Suponiendo el método preferido para abrir una instancia de Powershell en el directorio, una versión genérica sería la siguiente:

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

Para una versión específica de directorio:

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

Agregue -Recursea Get-ChildItempara afectar a todas las carpetas contenidas.

Ejemplo:

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

El Remove-Itemcomando debería ser todo lo que necesitas. Simplemente pase la carpeta raíz donde existen los archivos avi y pase la recursebandera junto con un filtro:

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

Esto debería ejecutarse más rápido que encontrar los archivos a través de Get-ChildIteme invocar Remove-Itempara cada uno.

Agregar el -WhatIfconmutador le indicará antes de eliminar cada archivo, lo que es más seguro para las personas que se sienten menos cómodas con PowerShell.

Keith Miller
fuente
1
No estoy seguro de por qué esta respuesta recibió un voto negativo. El -WhatIfcambio es innecesario. Envié una edición a esta respuesta. +1 El Remove-Itemcomando es todo lo que necesita y se ejecuta más rápido que la respuesta actualmente aceptada.
Greg Burghardt
Es una buena idea usar -whatifpara verificar que eliminará solo los archivos que desea eliminar. Y especialmente al ofrecer un comando de eliminación a aquellos con experiencia técnica desconocida. Lo mejor es mantener las ruedas de entrenamiento.
Keith Miller
0

Supongamos que hay varios archivos de texto en el directorio actual.
dir * -include *.txt& dir *.txtfunciona como se espera pero dir -include *.txtno da nada. La razón está bien explicada en Stack Overflow .

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

invitado-vm
fuente
0

Esto finalmente lo hizo por mí: probé todo lo anterior y nada.

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

seguro que no se requieren dos fuerzas, pero eso es lo que funciona, así que eso es con lo que me estoy quedando.

visionmn2
fuente
0

prueba esto

Remove-Item "c:\temp\*.txt" 
Esperento57
fuente
1
Hola, esto no parece eliminar archivos avi, y tampoco parece hacerlo desde la carpeta en cuestión. ¿Podría mejorar esta respuesta o explicar cómo podría ayudar en esta situación?
Sirex