Como combinar vários ficheiros CSV num só com PowerShell
Consolidar vários ficheiros CSV num único ficheiro é uma das tarefas mais comuns na preparação de dados: exportações mensais de vendas, relatórios diários ou extrações de sistemas diferentes que precisam de ser reunidos. Fazer isto à mão no Excel é lento e propenso a erros. Com o PowerShell, dá para combinar vários ficheiros CSV num só de forma automática e repetível. Este guia mostra como, passo a passo, com exemplos prontos a usar.
Pré-requisitos
- Windows com o Windows PowerShell 5.1 ou o PowerShell 7 (os comandos funcionam em ambos).
- Uma pasta com os ficheiros CSV a juntar, por exemplo
C:\Dados\Vendas. - Todos os ficheiros com as mesmas colunas e o mesmo separador (vírgula ou ponto e vírgula).
- Permissão de escrita na pasta onde vai gravar o resultado.
Passo 1: Organizar os ficheiros numa pasta
Comece por colocar todos os CSV a combinar na mesma pasta. Use nomes coerentes, como vendas-2026-01.csv e vendas-2026-02.csv, para saber sempre o que está a processar. Confirme que todos têm o mesmo cabeçalho, ou seja, os mesmos nomes de colunas pela mesma ordem: o ficheiro final vai basear-se nas colunas do primeiro ficheiro lido.
Passo 2: Listar os ficheiros com Get-ChildItem
Abra o PowerShell e use o Get-ChildItem para ver os CSV que vão ser processados. O parâmetro -Filter *.csv garante que só entram ficheiros com a extensão certa.
Get-ChildItem -Path "C:\Dados\Vendas" -Filter *.csv
Se a lista mostrar exatamente os ficheiros certos, pode avançar. Se aparecerem ficheiros a mais, mova-os para outra pasta antes de continuar.
Passo 3: Ler cada CSV com Import-Csv
O comando Import-Csv lê um ficheiro CSV e transforma cada linha num objeto, com uma propriedade por coluna. Ligando o Get-ChildItem ao Import-Csv através do pipeline (o símbolo |), lemos todos os ficheiros de seguida.
Get-ChildItem -Path "C:\Dados\Vendas" -Filter *.csv |
ForEach-Object { Import-Csv -Path $_.FullName }
Se os seus ficheiros usam ponto e vírgula como separador (habitual em Portugal e Espanha), acrescente-Delimiter ';'aoImport-Csv.
Passo 4: Juntar tudo e exportar num só ficheiro
Agora ligamos o resultado ao Export-Csv, que grava todos os objetos num único ficheiro com um só cabeçalho. Use -NoTypeInformation para evitar uma linha de tipo desnecessária e -Encoding UTF8 para manter os acentos corretos.
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
Em poucos segundos, o ficheiro vendas-consolidado.csv passa a reunir as linhas de todos os CSV da pasta.
Passo 5: (Opcional) Guardar a origem de cada linha
Muitas vezes é útil saber de que ficheiro veio cada linha. Podemos acrescentar uma coluna Origem com o nome do ficheiro, 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
Assim, cada linha do ficheiro final indica o CSV de onde foi lida, o que é muito prático para auditar os dados mais tarde.
Verificar o resultado
Para confirmar que correu bem, leia o ficheiro final e conte as linhas:
Import-Csv -Path "C:\Dados\vendas-consolidado.csv" | Measure-Object
O valor de Count deve ser igual à soma das linhas de dados de todos os ficheiros originais, sem contar os cabeçalhos. Pode ainda abrir o CSV no Excel e confirmar que existe apenas um cabeçalho no topo. Se o total não bater certo, verifique se algum ficheiro tinha colunas com nomes diferentes.
Conclusão
Com apenas três comandos — Get-ChildItem, Import-Csv e Export-Csv — automatizou a junção de vários CSV num único ficheiro, uma base essencial para qualquer fluxo de dados. O passo seguinte natural é agendar este script no Task Scheduler, para que a consolidação aconteça sozinha todos os meses. Que outra tarefa repetitiva de dados gostaria de deixar de fazer à mão?