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.
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.
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
.
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
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"
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.
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.
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:
Para sobrescribir archivos existentes sin preguntar, usa el parámetro -Force
:
Copy-Item -Path "C:\Ruta\Fuente\*" -Destination "C:\Ruta\Destino" -Recurse -Force
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.
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.
Jorge García
Fullstack developer