Cómo combinar varios archivos CSV en uno con PowerShell
Consolidar varios archivos CSV en un único archivo es una de las tareas más habituales en la preparación de datos: exportaciones mensuales de ventas, informes diarios o extracciones de sistemas distintos que hay que reunir. Hacerlo a mano en Excel es lento y propenso a errores. Con PowerShell puedes combinar varios archivos CSV en uno de forma automática y repetible. Esta guía te muestra cómo, paso a paso, con ejemplos listos para usar.
Requisitos previos
- Windows con Windows PowerShell 5.1 o PowerShell 7 (los comandos funcionan en ambos).
- Una carpeta con los archivos CSV a unir, por ejemplo
C:\Dados\Vendas. - Todos los archivos con las mismas columnas y el mismo separador (coma o punto y coma).
- Permiso de escritura en la carpeta donde vas a guardar el resultado.
Paso 1: Organizar los archivos en una carpeta
Empieza por colocar todos los CSV a combinar en la misma carpeta. Usa nombres coherentes, como vendas-2026-01.csv y vendas-2026-02.csv, para saber siempre qué estás procesando. Comprueba que todos tienen la misma cabecera, es decir, los mismos nombres de columnas en el mismo orden: el archivo final se basará en las columnas del primer archivo leído.
Paso 2: Listar los archivos con Get-ChildItem
Abre PowerShell y usa Get-ChildItem para ver los CSV que se van a procesar. El parámetro -Filter *.csv garantiza que solo entren archivos con la extensión correcta.
Get-ChildItem -Path "C:\Dados\Vendas" -Filter *.csv
Si la lista muestra exactamente los archivos correctos, puedes continuar. Si aparecen archivos de más, muévelos a otra carpeta antes de seguir.
Paso 3: Leer cada CSV con Import-Csv
El comando Import-Csv lee un archivo CSV y convierte cada fila en un objeto, con una propiedad por columna. Al conectar Get-ChildItem con Import-Csv mediante el pipeline (el símbolo |), leemos todos los archivos en secuencia.
Get-ChildItem -Path "C:\Dados\Vendas" -Filter *.csv |
ForEach-Object { Import-Csv -Path $_.FullName }
Si tus archivos usan punto y coma como separador (habitual en Portugal y España), añade-Delimiter ';'alImport-Csv.
Paso 4: Unir todo y exportar a un solo archivo
Ahora conectamos el resultado con Export-Csv, que escribe todos los objetos en un único archivo con una sola cabecera. Usa -NoTypeInformation para evitar una línea de tipo innecesaria y -Encoding UTF8 para mantener correctos los acentos.
Get-ChildItem -Path "C:\Dados\Vendas" -Filter *.csv |
ForEach-Object { Import-Csv -Path $_.FullName } |
Export-Csv -Path "C:\Dados\vendas-consolidado.csv" -NoTypeInformation -Encoding UTF8
En pocos segundos, el archivo vendas-consolidado.csv reúne las filas de todos los CSV de la carpeta.
Paso 5: (Opcional) Guardar el origen de cada fila
Muchas veces es útil saber de qué archivo procede cada fila. Podemos añadir una columna Origem (origen) con el nombre del archivo, usando Add-Member antes de exportar.
Get-ChildItem -Path "C:\Dados\Vendas" -Filter *.csv | ForEach-Object {
$nome = $_.Name
Import-Csv -Path $_.FullName | ForEach-Object {
$_ | Add-Member -NotePropertyName Origem -NotePropertyValue $nome -PassThru
}
} | Export-Csv -Path "C:\Dados\vendas-consolidado.csv" -NoTypeInformation -Encoding UTF8
Así, cada fila del archivo final indica el CSV del que se leyó, lo que resulta muy práctico para auditar los datos más adelante.
Comprobar el resultado
Para confirmar que salió bien, lee el archivo final y cuenta las filas:
Import-Csv -Path "C:\Dados\vendas-consolidado.csv" | Measure-Object
El valor de Count debe ser igual a la suma de las filas de datos de todos los archivos originales, sin contar las cabeceras. También puedes abrir el CSV en Excel y comprobar que solo hay una cabecera arriba. Si el total no cuadra, revisa si algún archivo tenía columnas con nombres distintos.
Conclusión
Con solo tres comandos — Get-ChildItem, Import-Csv y Export-Csv — has automatizado la unión de varios CSV en un único archivo, una base esencial para cualquier flujo de datos. El siguiente paso natural es programar este script en el Task Scheduler para que la consolidación ocurra sola cada mes. ¿Qué otra tarea repetitiva de datos te gustaría dejar de hacer a mano?