PowerShell Bucle a través de archivos y carpetas

John Wachira 15 febrero 2024
  1. Recorra archivos y carpetas usando PowerShell Get-ChildItem
  2. Recorra archivos y carpetas utilizando PowerShell Get-ChildItem y ForEach
PowerShell Bucle a través de archivos y carpetas

Este artículo ilustra cómo podemos escribir un script de PowerShell para recorrer archivos y carpetas. Usaremos las declaraciones Get-ChildItem y ForEach para crear diferentes scripts de PowerShell. Saltemos directamente.

Recorra archivos y carpetas usando PowerShell Get-ChildItem

Usamos el cmdlet de PowerShell Get-ChildItem para mostrar una lista de archivos y carpetas en una ubicación específica. Usamos el atributo -path para especificar la ruta al directorio deseado.

El Get-ChildItem también utiliza gci como alias.

Por ejemplo, si queremos obtener una lista de los archivos y carpetas en nuestra unidad C:/, podemos ejecutar lo siguiente:

Get-ChildItem -Path 'C:\'

El comando anterior solo mostrará los archivos y carpetas en la raíz de nuestro disco. Para obtener el contenido de los directorios secundarios (subcarpetas), podemos agregar el parámetro -Recurse, como se ilustra a continuación.

Get-ChildItem -Path 'C:\' -Recurse

PowerShell mostrará el contenido de todas las subcarpetas ubicadas en nuestro disco.

Recorra archivos y carpetas utilizando PowerShell Get-ChildItem y ForEach

Usamos el bucle ForEach de PowerShell para actuar como cada objeto en una colección de objetos. Esta es la estructura general cuando se utiliza el cmdlet Get-ChildItem y el bucle ForEach:

Get-ChildItem Path "C:\" |

Foreach-Object {

#Some action with $_.FullName

}

Veamos algunos scripts de ejemplo que usan las dos utilidades de PowerShell.

Digamos que queremos eliminar todos los archivos .csv en nuestra carpeta C:\Users\pc. ¿Cómo hacemos esto?

Como se ilustra a continuación, podemos usar el cmdlet Get-ChildItem y el bucle ForEach para realizar esta tarea.

Get-ChildItem Path "C:\Users\pc" -Recurse -Filter *.csv
|
Foreach-Object {
Remove-Item $_.FullName -WhatIF
}

El script anterior usa el cmdlet de PowerShell Get-ChildItem con el parámetro -Recurse para obtener todos los archivos en nuestra carpeta C:\Users\pc. Luego usamos el parámetro Filtro para buscar archivos con solo una extensión de archivo .csv.

Canalizamos los resultados al bucle ForEach, donde se eliminan los archivos. Sin embargo, como no queremos borrar nuestros archivos, hemos añadido el parámetro -WhatIf. A continuación se muestra el resultado del script anterior.

ForEach Loop para eliminar archivos CSV

Nuestro script ha encontrado seis archivos con una extensión de archivo .csv. Los archivos aún no se han eliminado ya que usamos el parámetro -WhatIf.

También podemos crear un script que elimine archivos anteriores a una fecha determinada. Esto puede resultar útil al limpiar archivos de registro temporales de nuestro sistema.

A continuación se muestra un script de ejemplo que elimina archivos con más de 7 días de antigüedad en nuestro directorio pc.

Get-ChildItem C:\Users\pc\ -Recurse
|
Where-Object { $_.CreationTime -lt ($(Get-Date).AddDays(-7))} |
ForEach-Object { remove-Item $_.FullName whatif }

Este Get-ChildItem con el parámetro Recurse buscará todos los archivos en nuestra carpeta pc y los reducirá a nuestro bucle ForEach. El bucle eliminará todos los archivos que tengan más de siete días.

Como no queremos deshacernos de los archivos de nuestra carpeta, hemos añadido el parámetro -WhatIf.

En conclusión, podemos usar PowerShell Get-ChildItem y el bucle ForEach para crear scripts que recorren archivos y carpetas.

El bucle ForEach realizará una acción específica contra todos los archivos canalizados desde el cmdlet Get-ChildItem. Hay diferentes formas en que podemos usar las dos utilidades de PowerShell.

John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Artículo relacionado - PowerShell File