Copiar archivos y carpetas recursivamente en PowerShell

Este tutorial de informática muestra cómo copiar archivos y carpetas recursivamente en PowerShell, utilizando el comando Copy-Item de Windows. Permite copiar un gran número de archivos y carpetas en un solo comando.

Windows PowerShell es un shell que permite a los usuarios ejecutar comandos escritos en el lenguaje de scripting de Microsoft PowerShell.

El usuario puede ejecutar scripts de PS en Windows, que son similares a los archivos por lotes de versiones anteriores de Windows, es decir, a los comandos de MS-DOS. Tenga en cuenta que tanto los comandos DOS como PowerShell están disponibles en Windows 10 y Windows 11, por ejemplo.

Copiar archivos y carpetas de forma recursiva con un script de PowerShell

Windows PowerShell es un shell de línea de comandos basado en tareas y un lenguaje de secuencias de comandos que se basa en .NET Framework.

Windows PowerShell incluye un cmdlet (herramienta de línea de comandos) para copiar archivos. Los cmdlets son como pequeños comandos que pueden combinarse para realizar tareas como la copia de archivos. El cmdlet para copiar archivos se llama Copy-Item.

Por ejemplo, el lenguaje de scripts le ayudará a reducir el tiempo que tarda en copiar archivos, automatizar tareas, gestionar configuraciones del sistema, etc.

El cmdlet Copy-Item se puede utilizar para copiar uno o más elementos de una ubicación a otra, como por ejemplo de una carpeta del sistema de archivos a una unidad de CD, o de una carpeta en un árbol del sistema de archivos a otra carpeta en el mismo árbol.

Windows PowerShell está diseñado para la administración de sistemas, pero también puede utilizarse para otros fines. Por ejemplo, puede utilizarse para tareas como la copia recursiva de varios archivos o carpetas de una ubicación a otra.

El script comienza definiendo la ubicación de la carpeta de origen y luego copia todos los archivos y carpetas de esa ubicación a la carpeta de destino.

Copia recursiva de archivos y carpetas desde una carpeta de origen en PowerShell

Para empezar, presentamos un caso sencillo y práctico, una carpeta de origen C:WORK\Folder con dos subcarpetas:

  • La carpeta Folder contiene
    • file (1).txt
    • file (2).txt
    • file (3).txt
    • La carpeta SubFolder_1 contiene
      • file (4).txt
      • file (5).txt
      • file (6).txt

El objetivo es copiar todos los archivos y la estructura de árbol en la carpeta de destino: C:\WORK\Target

Mostrar todos los archivos recursivamente en PowerShell con el comando Get-ChildItem
Mostrar todos los archivos recursivamente en PowerShell con el comando Get-ChildItem
Get-ChildItem C:\WORK\Folder -Recurse

Copie todos los archivos de las carpetas y subcarpetas con el comando Copy-Item y la opción -Recurse.

Copy-Item -Path C:\WORK\Folder\ -Destination C:\WORK\Target -Recurse
Copiar archivos y carpetas recursivamente en PowerShell con Copy-Item
Copiar archivos y carpetas recursivamente en PowerShell con Copy-Item

Compruebe que los archivos se han copiado en la carpeta de destino:

Get-ChildItem C:\WORK\Target -Recurse
Mostrar archivos y carpetas en la carpeta de destino de forma recursiva en PowerShell
Mostrar archivos y carpetas en la carpeta de destino de forma recursiva en PowerShell

El script ha copiado con éxito todos los archivos y carpetas de la carpeta WORK, incluyendo la carpeta llamada Folder.

Copiar archivos recursivamente y forzar la sobreescritura en la carpeta de destino

Para forzar la copia si una o más carpetas o archivos ya existen en la carpeta de destino, utilice la opción -Force.

Copy-Item -Path C:\WORK\Folder\ -Destination C:\WORK\Target -Recurse -Force
Copiar archivos y carpetas con PowerShell recursivamente y sobrescribir el destino
Copiar archivos y carpetas con PowerShell recursivamente y sobrescribir el destino

Selección de extensiones de tipo de archivo específicas

El script también proporciona una opción para copiar sólo tipos de archivo específicos, como *.docx o *.jpg, o un archivo específico con un nombre determinado.

Por ejemplo, para forzar la copia de archivos TXT solamente e ignorar todas las demás extensiones, utilice este script

Copy-Item -Path C:\WORK\Folder\ -Destination C:\WORK\Target -Recurse -Force -Filter "*.txt"

Excluir archivos de la copia con PowerShell

Por último, el script ofrece una opción para excluir determinados directorios de la copia.

Para excluir determinadas extensiones de archivo, utilice la opción PS -Exclude. En este ejemplo, la copia es recursiva y copia todos los archivos excepto los de Word con extensión Docx.

Copy-Item -Path C:\WORK\Folder\ -Destination C:\WORK\Target -Recurse -Exclude "*.docx"

Siguiendo con los comandos de Windows, también es posible realizar las mismas copias recursivas de archivos y carpetas con el comando xcopy de MS-DOS.

Be the first to comment

Leave a Reply

Tu dirección de correo no será publicada.


*