PowerShell: Cómo eliminar todos los archivos que no están en una lista
Puede utilizar la siguiente sintaxis en PowerShell para eliminar todos los archivos de un directorio que no pertenecen a una lista específica:
$keep = Get-Content keep.txt
gci ./data1 | Where-Object { $keep -notcontains $_.name } | Remove-Item
Este ejemplo en particular elimina todos los archivos en el directorio denominado data1 que no pertenecen a la lista de nombres de archivos especificados en el archivo keep.txt.
El siguiente ejemplo muestra cómo utilizar esta sintaxis en la práctica.
Ejemplo: Cómo eliminar todos los archivos que no están en una lista en PowerShell
Supongamos que queremos eliminar todos los archivos en un directorio llamado datos1 que no pertenecen a una lista de nombres de archivos contenidos en un archivo llamado keep.txt.
Podemos usar el cmdlet Get-Content para ver primero cada uno de los nombres de archivo en el archivo keep.txt:
Podemos ver que hay tres nombres de archivos guardados en el archivo keep.txt:
- equipo.csv
- entrenadores.csv
- administradores.csv
A continuación, podemos usar el cmdlet gci (un alias de Get-ChildItem) para ver todos los archivos en un directorio llamado data1:
Podemos ver que hay seis archivos en total en este directorio.
Supongamos que queremos eliminar todos los archivos de este directorio que no pertenecen a la lista de nombres de archivos especificados en el archivo keep.txt.
Podemos utilizar la siguiente sintaxis para hacerlo:
$keep = Get-Content keep.txt
gci ./data1 | Where-Object { $keep -notcontains $_.name } | Remove-ItemLa siguiente captura de pantalla muestra cómo utilizar esta sintaxis en la práctica:
Tenga en cuenta que cuando ejecutamos el comando gci nuevamente, podemos ver que todos los archivos en la carpeta data1 que no pertenecían a la lista de nombres de archivos especificados en keep El archivo .txt ha sido eliminado.


