Volver a la página principal
jueves 18 julio 2024
560

Cómo copiar archivos en powershell

Introducción a los Comandos Básicos

Antes de profundizar en cómo copiar múltiples archivos, es importante entender los comandos básicos de PowerShell relacionados con la gestión de archivos.

Comando Copy-Item

El comando principal para copiar archivos en PowerShell es Copy-Item. Su sintaxis básica es la siguiente:

Copy-Item -Path "Ruta\Al\Archivo" -Destination "Ruta\Al\Destino"

Este comando copia un archivo de la ruta especificada al destino. Puedes usar comodines (*) para copiar varios archivos que coincidan con un patrón.

Copiar Múltiples Archivos desde una Carpeta

Si deseas copiar todos los archivos de una carpeta a otra, puedes usar el siguiente comando:

Copy-Item -Path "C:\Ruta\Fuente\*" -Destination "C:\Ruta\Destino"

Este comando copia todos los archivos (pero no las carpetas) de C:\Ruta\Fuente a C:\Ruta\Destino.

Copiar Archivos Recursivamente

Para copiar archivos y carpetas de manera recursiva (incluyendo subcarpetas), debes agregar el parámetro -Recurse:

Copy-Item -Path "C:\Ruta\Fuente\*" -Destination "C:\Ruta\Destino" -Recurse

Filtrar Archivos por Extensión

Puedes filtrar los archivos por su extensión usando comodines. Por ejemplo, para copiar solo archivos .txt:

Copy-Item -Path "C:\Ruta\Fuente\*.txt" -Destination "C:\Ruta\Destino"

Copiar Múltiples Archivos Específicos

Si necesitas copiar archivos específicos y no quieres usar comodines, puedes hacerlo con una lista de archivos:

$archivos = @("C:\Ruta\Fuente\archivo1.txt", "C:\Ruta\Fuente\archivo2.docx", "C:\Ruta\Fuente\archivo3.pdf")
foreach ($archivo in $archivos) {
    Copy-Item -Path $archivo -Destination "C:\Ruta\Destino"
}

Este script recorre cada archivo en la lista $archivos y lo copia a la carpeta destino.

Copiar Archivos con Preservación de Estructura de Carpetas

Para mantener la estructura de carpetas al copiar, especialmente útil en situaciones de respaldo o migración, puedes usar xcopy o robocopy, pero aquí te mostraré cómo hacerlo con PowerShell:

Get-ChildItem -Path "C:\Ruta\Fuente" -Recurse | ForEach-Object {
    $destino = $_.FullName.Replace("C:\Ruta\Fuente", "C:\Ruta\Destino")
    if ($_.PSIsContainer) {
        New-Item -ItemType Directory -Path $destino -Force
    } else {
        Copy-Item -Path $_.FullName -Destination $destino -Force
    }
}

Este script recorre recursivamente todos los elementos en C:\Ruta\Fuente. Si el elemento es una carpeta, crea la misma carpeta en el destino. Si es un archivo, lo copia a la ubicación correspondiente en el destino, preservando así la estructura original.

Manejo de Conflictos

Cuando copias archivos, puede haber conflictos si un archivo con el mismo nombre ya existe en el destino. Aquí hay algunas formas de manejar estos conflictos:

Sobrescribir Archivos

Para sobrescribir archivos existentes sin preguntar, usa el parámetro -Force:

Copy-Item -Path "C:\Ruta\Fuente\*" -Destination "C:\Ruta\Destino" -Recurse -Force

Evitar Sobrescribir Archivos

Para evitar sobrescribir archivos existentes, puedes usar una lógica condicional:

Get-ChildItem -Path "C:\Ruta\Fuente" -Recurse | ForEach-Object {
    $destino = $_.FullName.Replace("C:\Ruta\Fuente", "C:\Ruta\Destino")
    if (-not (Test-Path -Path $destino)) {
        Copy-Item -Path $_.FullName -Destination $destino -Recurse
    }
}

Este script copia solo los archivos que no existen en el destino.

Conclusión

Copiar múltiples archivos en PowerShell es una tarea que puede variar en complejidad dependiendo de tus necesidades específicas. Desde copiar todos los archivos de una carpeta hasta preservar la estructura de directorios o evitar sobrescribir archivos, PowerShell ofrece una gran flexibilidad. Con los comandos y scripts presentados en este artículo, deberías poder abordar la mayoría de las tareas de copia de archivos de manera eficiente y efectiva.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer