Limpar Ficheiros Temporários e Libertar Espaço no Windows

O disco principal chega ao limite com o tempo: atualizações acumuladas, temporários de aplicações, caches de navegador, ficheiros de hibernação e versões antigas do Windows. O Windows traz as ferramentas para recuperar esse espaço sem instalar nada, e um script PowerShell automatiza a rotina nas pastas seguras. Este guia cobre o Windows 10 e o Windows 11, com o script completo no fim.

Neste artigo

1. Onde está o espaço ocupado

Antes de apagar, ver o que ocupa o disco. No Definições > Sistema > Armazenamento, o Windows mostra o disco por categorias (aplicações, temporários, documentação, OneDrive), e o item Ficheiros temporários lista o que pode remover já: ficheiros temporários, cache de Delivery Optimization, Recycle Bin e, se houver, o Windows.old de uma atualização recente.

Para a linha de comandos, dois comandos servem de diagnóstico rápido no PowerShell:

Get-PSDrive C | Select-Object Used,Free
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

O AnalyzeComponentStore informa se a limpeza do component store é recomendada, o tamanho real do WinSxS e quanto se pode recuperar. Em máquinas com pouco disco, o resultado orienta os passos seguintes.

2. Armazenamento e Storage Sense (o caminho GUI)

O Storage Sense é a limpeza automática da Microsoft: apaga ficheiros temporários, esvazia o Recycle Bin após um número de dias e descarrega conteúdo OneDrive apenas na cloud quando não é aberto. Por omissão está activo e corre “quando o disco está com pouco espaço” (doc oficial), configurável para diário, semanal, mensal ou naquele gatilho.

  • Definições > Sistema > Armazenamento > Storage Sense — activar e escolher a cadência
  • Definições > Sistema > Armazenamento > Ficheiros temporários — limpeza imediata com checkbox por categoria
  • Downloads: o Storage Sense pode apagar ficheiros de Downloads após N dias sem abrir — deixar desligado em PCs de utilizadores finais (documentos baixados podem ser perdidos)

O Disk Cleanup (cleanmgr) continua disponível: cleanmgr /d C: abre a janela clássica, e cleanmgr /verylowdisk corre com as opções por omissão e sem prompts (doc oficial da sintaxe), útil em scripts batch. A opção “Windows Update Cleanup” dentro do cleanmgr é a mesma que o DISM trata no passo 5.

Propriedades da unidade C: no Windows com o botão Disk Cleanup destacado
Limpeza de Disco no Windows (imagem oficial Microsoft)

3. O que nunca apagar

⚠ Atenção

O Clear-RecycleBin é permanente (no script fica comentável), o diskpart clean destrói o disco inteiro, e o Windows.old contém a versão anterior do Windows: após a sua remoção, o rollback para a versão anterior deixa de ser possível (a Microsoft dá 10 dias por omissão). Só remover o Windows.old quando a atualização estiver validada.

  • Windows.old — só via Definições > Ficheiros temporários (ou Storage Sense), e só após validar a atualização
  • Prefetch (%windir%\Prefetch) — não ganha espaço real: os ficheiros .pf são pequenos e recriados a cada arranque para acelerar aplicações frequentes. A limpeza regular do Prefetch é um mito popular que prejudica o tempo de arranque
  • WinSxS à mão — nunca Remove-Item directo na pasta: só via DISM (passo 5), que sabe o que pode remover
  • catroot2 — só em troubleshooting de Windows Update com o serviço cryptsvc parado, não na rotina de limpeza

4. Script PowerShell: temporários, cache de updates e cache de entrega

O script abaixo é a versão segura do que circula em redes sociais: acrescenta -ErrorAction SilentlyContinue (ficheiros em uso não partem o script), usa o cmdlet Delete-DeliveryOptimizationCache (módulo DeliveryOptimization do Windows, incluído na referência de PowerShell do Windows Server 2025), não toca no Prefetch e mostra o espaço recuperado. Correr em PowerShell como Administrador:

# 1. Parar os serviços de update ( liberta lock aos ficheiros )
Stop-Service wuauserv,bits -Force -ErrorAction SilentlyContinue

# 2. Cache de downloads do Windows Update
Remove-Item -Path "$env:windir\SoftwareDistribution\Download\*" -Recurse -Force -ErrorAction SilentlyContinue

# 3. Cache de Delivery Optimization ( cmdlet oficial )
Delete-DeliveryOptimizationCache -Force -ErrorAction SilentlyContinue

# 4. Temporários do utilizador e do sistema
Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:windir\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue

# 5. Recycle Bin ( PERMANENTE — comente a linha se não quiser limpar )
Clear-RecycleBin -DriveLetter C -Force -ErrorAction SilentlyContinue

# 6. Disk Cleanup sem prompts ( opções por omissão )
Start-Process cleanmgr -ArgumentList '/verylowdisk' -Wait

# 7. Retomar os serviços
Start-Service bits,wuauserv -ErrorAction SilentlyContinue

# Espaço livre depois
Get-PSDrive C | Select-Object Used,Free

O que cada bloco faz:

  • Serviços: wuauserv (Windows Update) e bits (transferências em segundo plano) mantêm handles abertos sobre os ficheiros de cache, e é por isso que a remoção falha com eles activos
  • SoftwareDistribution\Download: cache de instaladores de atualização, regenerada no próximo download
  • Delete-DeliveryOptimizationCache: cache P2P de entrega de atualizações entre PCs (o Remove-Item directo ao caminho funciona, mas o cmdlet é a via suportada)
  • %TEMP% e %windir%\Temp: temporários de sessão e de sistema, com ficheiros em uso saltados pelo -ErrorAction SilentlyContinue
  • cleanmgr /verylowdisk: doc oficial — “Run with the default settings, no user prompts”

5. Component store (WinSxS) e hibernação

O WinSxS (component store) é o maior consumidor de disco a longo prazo: guarda todas as versões de componentes para permitir desinstalar atualizações. A limpeza oficial é por DISM, em prompt elevado — e é imediata. A tarefa agendada StartComponentCleanup (Task Scheduler\Microsoft\Windows\Servicing) faz o mesmo trabalho, mas espera 30 dias após cada update antes de remover a versão anterior e tem um timeout de 1 hora que pode deixar a limpeza incompleta. O DISM apanha tudo na hora:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

A opção /ResetBase remove todas as versões substituídas de cada componente: a doc oficial avisa que “all existing update packages can’t be uninstalled after this command” — as atualizações já instaladas deixam de poder ser desinstaladas (as futuras continuam a poder). Em servidores com SLA de rollback, correr o comando sem /ResetBase (o comando anterior) e reservar o /ResetBase para a janela de manutenção, depois de validar que nenhum rollback é necessário:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Hibernação: o hiberfil.sys tem tamanho por omissão em função da RAM física (a doc do /size fixa o mínimo em 50%). Em desktops sem hibernação (e sem Fast Startup dependente), powercfg /h off desactiva e apaga o ficheiro. Em portáteis, preferir powercfg /h /type reduced — doc oficial: o hiberfile reduced só suporta hiberboot (arranque rápido), não hibernação completa, e ocupa menos. Se o tamanho do hiberfile já foi personalizado (ou HiberFileSizePercent ≥ 40 na registry), o hiberfile conta como full e o comando devolve “The parameter is incorrect”: correr primeiro powercfg /h /size 0 e só depois /type reduced.

CompactOS: comprimir os binários do sistema em máquinas com disco pequeno (doc oficial): compact /compactos:always comprime, compact /compactos:query verifica o estado. Em máquinas com CPU fraco o custo de descompressão pode pesar — testar antes de aplicar em frota.

6. Erros comuns

Erro / sintoma Causa Correcção
Remove-Item: Access denied em %TEMP% Ficheiro em uso por uma aplicação ou serviço Normal: o -ErrorAction SilentlyContinue salta; fechar a aplicação e repetir
SoftwareDistribution não apaga wuauserv ou bits activos (handles abertos) Confirmar Stop-Service antes do bloco 2 (ou sc stop wuauserv, doc WSUS)
Delete-DeliveryOptimizationCache: cmdlet não existe Módulo DeliveryOptimization só no Windows 10 1809+/11 Alternar para Remove-Item no caminho %windir%\ServiceProfiles\NetworkService\AppData\Local\Microsoft\Windows\DeliveryOptimization\Cache
cleanmgr /verylowdisk não limpa mais nada Opções por omissão só: sem user prompts e sem categorias seleccionadas Usar /sageset:1 uma vez, escolher categorias, depois cleanmgr /sagerun:1 agendável
Dism erro 0x800f0806 Component store em estado pendente (update a meio ou reinício em falta) Reiniciar, terminar updates pendentes, repetir o /StartComponentCleanup
Espaço não recupera o esperado Ocupação real está em WinSxS, hiberfil, pagefile ou Windows.old AnalyzeComponentStore + powercfg /h off + Definições > Ficheiros temporários (Windows.old)

7. Checklist

  • [ ] Analisar o disco: Definições > Armazenamento + AnalyzeComponentStore
  • [ ] Storage Sense configurado (e Downloads desligado em PCs partilhados)
  • [ ] Ficheiros temporários limpos via Definições (com o Windows.old só após validar atualização)
  • [ ] Script PowerShell executado como Admin (temporários + cache de updates + DO + Recycle Bin)
  • [ ] WinSxS: /StartComponentCleanup e /ResetBase só quando o rollback de updates não for preciso
  • [ ] Hibernação: /h off em desktops ou /type reduced em portáteis
  • [ ] CompactOS avaliado em discos pequenos
  • [ ] Recycle Bin esvaziado (permanente, validar antes)

8. Artigos relacionados

9. Fontes oficiais