Você tem uma pasta cheia de arquivos PowerPoint .ppt antigos que precisa converter para o formato .pptx moderno. Abrir cada arquivo manualmente e usar Salvar Como é lento e sujeito a erros quando você tem dezenas ou centenas de apresentações. A causa raiz é que arquivos .ppt mais antigos usam um formato binário que carece de recursos como estrutura baseada em XML, compactação aprimorada e compatibilidade com ferramentas mais recentes do PowerPoint. Este artigo explica como usar PowerShell com o assembly Office Interop para converter em lote todos os arquivos .ppt de uma pasta para .pptx em uma única passagem automatizada.
Principais Pontos: Conversão em Lote de .ppt para .pptx via PowerShell
- Script PowerShell com namespace Microsoft.Office.Interop.PowerPoint: Inicia o PowerPoint em segundo plano, abre cada arquivo .ppt e o salva como .pptx sem interação do usuário.
- Filtro de extensão de arquivo -Filter “ppt”: Segmenta apenas arquivos no formato antigo e ignora arquivos já no formato .pptx.
- Objeto COM PowerPoint.Application com Visible = $false: Executa o processo de conversão silenciosamente, sem exibir a janela do PowerPoint.
Por que PowerShell com Office Interop é a Ferramenta Certa para Conversão em Lote
O PowerPoint não inclui uma ferramenta de conversão em lote integrada. O fluxo de trabalho Arquivo > Abrir e Arquivo > Salvar Como lida com um arquivo por vez. Para operações em lote, você precisa de uma abordagem programática que possa iterar sobre uma pasta, abrir cada apresentação e salvá-la no formato desejado.
PowerShell com a biblioteca Office Interop é a solução padrão porque controla diretamente o objeto de aplicação do PowerPoint. O assembly Interop expõe o modelo de objeto completo do PowerPoint, incluindo o método Presentation.SaveAs, que aceita o valor da enumeração PpSaveAsFileType ppSaveAsOpenXMLPresentation (valor 24) para saída .pptx.
Antes de começar, confirme os seguintes pré-requisitos:
- PowerPoint (Microsoft 365 ou 2021, 2019, 2016) está instalado na mesma máquina onde o script será executado.
- PowerShell 5.1 ou posterior está disponível. Windows 10 e Windows 11 incluem PowerShell 5.1 por padrão.
- Os arquivos .ppt não são protegidos por senha. O Interop não consegue abrir arquivos protegidos por senha sem intervenção manual.
- A conta de usuário que executa o script tem permissões de gravação na pasta de destino.
O script inicia o PowerPoint como um objeto COM. Cada arquivo .ppt é aberto, convertido e fechado um de cada vez. Após processar todos os arquivos, o script fecha o PowerPoint de forma limpa para liberar recursos do sistema.
Script PowerShell para Converter Todos os Arquivos .ppt para .pptx
O script abaixo realiza a conversão em lote. Copie o script inteiro em um arquivo .ps1, por exemplo Convert-PptToPptx.ps1. Ajuste o caminho $sourceFolder para corresponder ao seu ambiente.
- Abra o PowerShell como Administrador
Pressione a tecla Windows, digite PowerShell, clique com o botão direito em Windows PowerShell e selecione Executar como administrador. Direitos de administrador não são estritamente necessários para o script, mas evitam erros de permissão se a pasta de origem estiver em um local protegido, como C:\Program Files. - Defina a política de execução para permitir scripts locais
Execute este comando: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Essa configuração permite que scripts criados localmente sejam executados, enquanto ainda bloqueia scripts remotos não assinados. - Crie o arquivo de script PowerShell
Abra o Bloco de Notas ou qualquer editor de texto. Cole o seguinte código:
# Convert-PptToPptx.ps1
# Converte em lote todos os arquivos .ppt em uma pasta para .pptx usando Office Interop
$sourceFolder = "C:\Apresentacoes\FormatoAntigo"
$pptFiles = Get-ChildItem -Path $sourceFolder -Filter "ppt"
if ($pptFiles.Count -eq 0) {
Write-Host "Nenhum arquivo .ppt encontrado em $sourceFolder" -ForegroundColor Yellow
exit
}
$powerPoint = New-Object -ComObject PowerPoint.Application
$powerPoint.Visible = $false # Executar em segundo plano
foreach ($file in $pptFiles) {
$fullPath = $file.FullName
$outputPath = [System.IO.Path]::ChangeExtension($fullPath, ".pptx")
Write-Host "Convertendo: $fullPath" -ForegroundColor Green
$presentation = $null
try {
$presentation = $powerPoint.Presentations.Open($fullPath, $true, $false, $false)
$presentation.SaveAs($outputPath, 24) # 24 = ppSaveAsOpenXMLPresentation
$presentation.Close()
Write-Host "Salvo: $outputPath" -ForegroundColor Cyan
}
catch {
Write-Host "Erro ao converter $fullPath : $_" -ForegroundColor Red
}
finally {
if ($presentation -ne $null) {
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($presentation) | Out-Null
}
}
}
$powerPoint.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($powerPoint) | Out-Null
Write-Host "Conversão concluída. Processados $($pptFiles.Count) arquivos." -ForegroundColor Green
- Salve o arquivo de script
Salve o arquivo como Convert-PptToPptx.ps1 em uma pasta que você possa acessar facilmente pelo PowerShell, por exemplo C:\Scripts. - Execute o script
Na janela do PowerShell, digite: C:\Scripts\Convert-PptToPptx.ps1 e pressione Enter. O script lista cada arquivo à medida que converte. Os arquivos .ppt originais permanecem inalterados; novos arquivos .pptx aparecem na mesma pasta. - Verifique a saída
Abra alguns dos novos arquivos .pptx no PowerPoint e confirme se todos os slides, textos, imagens e transições estão intactos. A conversão preserva a maioria do conteúdo, mas algumas animações muito antigas ou objetos incorporados podem sofrer pequenas alterações.
Personalização de Parâmetros do Script para Diferentes Estruturas de Pastas
O script acima processa apenas a pasta de nível superior. Se seus arquivos .ppt estiverem espalhados em subpastas, modifique a linha Get-ChildItem para incluir o parâmetro -Recurse. Substitua a linha original por:
$pptFiles = Get-ChildItem -Path $sourceFolder -Filter "ppt" -Recurse
Com -Recurse, o script encontra arquivos .ppt em todas as subpastas e salva o arquivo .pptx convertido na mesma subpasta onde o .ppt original reside. A hierarquia de pastas é preservada.
Se você quiser enviar todos os arquivos convertidos para uma única pasta de saída em vez de mantê-los junto com os originais, adicione uma variável de caminho de destino e use o cmdlet Join-Path. Por exemplo:
$destinationFolder = "C:\Apresentacoes\Convertidas"
if (-not (Test-Path $destinationFolder)) {
New-Item -ItemType Directory -Path $destinationFolder | Out-Null
}
$outputPath = Join-Path -Path $destinationFolder -ChildPath ($file.BaseName + ".pptx")
Problemas Comuns Durante a Conversão em Lote e Como Resolvê-los
Falha ao instanciar o objeto COM do PowerPoint
Se o script lançar um erro em New-Object -ComObject PowerPoint.Application, o PowerPoint não está instalado ou o registro COM está corrompido. Reinstale o PowerPoint a partir do instalador do Microsoft 365 ou Office. No Windows 11, vá em Configurações > Aplicativos > Aplicativos instalados, encontre Microsoft 365 e selecione Modificar > Reparação Rápida.
Script é executado, mas nenhum arquivo .pptx aparece
Verifique o caminho $sourceFolder. O script exibe um aviso amarelo se encontrar zero arquivos .ppt. Verifique também se os arquivos têm extensão .ppt e não .pptm ou .pps. O -Filter “ppt” não corresponde a arquivos .pptm ou .pps.
Processo do PowerPoint permanece no Gerenciador de Tarefas após o término do script
O script chama Quit e libera o objeto COM, mas um processo do PowerPoint pode persistir se uma exceção impedir a execução do bloco finally. Para limpar, abra o Gerenciador de Tarefas, encontre POWERPNT.EXE e finalize a tarefa. Para evitar isso, envolva todo o loop em uma estrutura try-catch-finally conforme mostrado no script acima.
Conversão muito lenta em pastas grandes
Cada arquivo .ppt leva vários segundos para abrir e salvar. Para pastas com mais de 100 arquivos, o script pode executar por vários minutos. Isso é esperado porque o Interop abre o aplicativo PowerPoint em segundo plano para cada arquivo. Não há método mais rápido usando apenas PowerShell e Interop, pois a conversão requer o mecanismo de renderização completo do PowerPoint.
PowerShell Interop vs Conversores em Lote de Terceiros
| Item | PowerShell + Office Interop | Conversor em Lote de Terceiros |
|---|---|---|
| Custo | Gratuito se você já possui o PowerPoint | Geralmente requer licença paga |
| Fidelidade | Usa o mesmo mecanismo de renderização do PowerPoint | Pode perder animações, fontes incorporadas ou SmartArt |
| Automação | Programável, pode ser agendado via Task Scheduler | Geralmente apenas GUI ou opções de linha de comando limitadas |
| Dependência | PowerPoint deve estar instalado na mesma máquina | Independente, não requer Office |
| Velocidade | Mais lento porque cada arquivo abre no PowerPoint | Mais rápido para slides simples com texto e imagem |
Para a maioria dos usuários empresariais, a abordagem PowerShell Interop oferece o melhor equilíbrio entre fidelidade e custo. Considere um conversor de terceiros apenas se precisar executar conversões em um servidor sem PowerPoint instalado ou se precisar de uma taxa de transferência significativamente maior em centenas de arquivos diariamente.
Agora você pode converter uma pasta inteira de arquivos .ppt para .pptx com um único comando PowerShell. Após a conversão, abra os novos arquivos no PowerPoint para verificar a fidelidade do conteúdo. Para automação contínua, agende o script usando o Agendador de Tarefas do Windows para execução noturna. Uma dica avançada: adicione um parâmetro -PassThru ao script que retorna a lista de caminhos de arquivos convertidos, que você pode canalizar para uma função de registro ou um script de upload para o SharePoint.