目录
在使用电脑的过程中,有时候我们会碰到C盘爆满,导致电脑性能下降引起的卡顿,让我们烦不胜烦。为什么C盘会爆满呢?为什么有时候C盘有较大的空间,结果一段时间后存储告急?这些问题的出现,让我们意识C盘的空间需要清理瘦身,电脑才能更好的运转。
C盘爆满的原因分析
一、系统文件和备份占用
1、Windows系统更新
在Windows系统在更新后会保留Windows.old旧系统文件,用于回滚。
此文件可以帮助用户将Windows返回到之前的系统状态;帮助用户在系统升级等情况导致的重要文件或设置进行找回。
Windows.old文件较大,虽然其大小是随时间变化而变化,但是也能够占用盘符最低几个G的空间。因此,我们需要对此文件进行监控,判断是否需要对其采取措施来减轻C盘压力。
话又说回来,这种文件一般不会出现在我们的电脑中,除非像前面所说需要提升Windows系统版本。
2、系统还原点
利用系统还原功能创建系统还原点,是可以帮助我们在使用Windows系统时一旦系统重要文件被删除或者破坏等等情况引起了系统工作异常后恢复系统到创建系统还原点时的系统状态。
这些文件长期积累也会占用C盘较大的存储空间,使得我们使用电脑出现问题。
系统还原点一般存储在C:\System Volume Information这个文件夹下,这是一个隐藏文件夹,普通用户在正常情况下是看不见这个文件夹的。
用户在自身判明自己不需要系统还原点的时候,可以对其进行删除。
3、软件安装
这种情况我们应该都不会犯,一般在安装软件都会更改安装位置,因此这种情况就不详细说明了。
4、临时文件与缓存堆积
这种情况,临时文件的产生会占用C盘空间,但是一般情况下删除这些文件不会对系统造成较大影响,因为这些文件包括:系统临时文件、应用程序临时文件、用户临时文件、特殊临时文件(安装包临时文件、浏览器缓存、系统更新相关文件等等)。
注意:在删除临时文件时,不小删除了正在使用的应用的重要的临时文件。
5、虚拟内存与休眠文件
虚拟内存默认存储在C盘中,因其特性需要占据C盘一定的空间,加剧本来就不够的使用空间。
休眠文件通常也是在C盘中,但是其文件也比较大,如果你没有使用其的需求,可以将其删除。
解决方法
1、清理Windows更新文件
手动清理:
按下WIN+S搜索“磁盘清理”——>右键点击管理员启动——>选择C盘并确定——>勾选对应的清理选项——>点击确定即可
2、清楚系统还原点
按下WIN+R输入sysdm.cpl——>弹出的页面切换到系统保护——>选择C盘——>点击配置——>点击删除即可。
图一
图二
3、清楚临时文件与缓存
手动清理:
可采用方法一的方式来清理。
接下来我们来了解自动清理临时文件与缓存的方法,解放我们的双手。
在桌面上新建一个文本文档——>命名为DiskCleaner.ps1——>到C盘根目录下新建一个文件夹——>命名为Scripts——>将桌面上的文本文档移入刚刚创建的文件夹下——>打开文件,输入以下内容,保存即可。
# 创建日志目录(如果不存在)
$logPath = "C:\rizhi"
if (-not (Test-Path $logPath)) {
New-Item -Path $logPath -ItemType Directory -Force | Out-Null
}
# 生成带时间戳的日志文件名
$logFile = Join-Path $logPath ("CleanupLog_" + (Get-Date -Format "yyyyMMdd-HHmmss") + ".txt")
# 自定义日志函数
function Write-Log {
param([string]$Message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $logFile -Value "[$timestamp] $Message"
}
try {
# 开始记录日志
Write-Log "---------- 开始C盘清理操作 ----------"
# 1. 磁盘清理工具
Write-Log "正在运行磁盘清理工具 (cleanmgr)..."
cleanmgr /sagerun:9999 /d C: | Out-Null
Write-Log "磁盘清理工具执行完成"
# 2. 清理临时文件
Write-Log "开始清理C盘临时文件..."
$tempPaths = @(
"$env:windir\Temp",
"$env:LOCALAPPDATA\Temp"
)
foreach ($path in $tempPaths) {
if (Test-Path $path) {
Write-Log "正在清理:$path"
Remove-Item -Path "$path\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Log "$path 清理完成"
}
}
# 3. 清理Windows更新缓存
Write-Log "开始清理C盘Windows更新缓存..."
try {
Stop-Service -Name wuauserv -Force -ErrorAction Stop
Write-Log "已停止 Windows Update 服务"
$updateCachePath = "$env:windir\SoftwareDistribution\Download"
if (Test-Path $updateCachePath) {
Remove-Item -Path "$updateCachePath\*" -Recurse -Force -ErrorAction Stop
Write-Log "更新缓存已清除"
}
}
catch {
Write-Log "清理更新缓存时出错:$_"
}
finally {
Start-Service -Name wuauserv -ErrorAction SilentlyContinue
Write-Log "已重新启动 Windows Update 服务"
}
# 4. 清理系统日志
Write-Log "开始清理C盘系统日志..."
$eventLogs = @("Application", "System")
foreach ($log in $eventLogs) {
wevtutil cl $log | Out-Null
Write-Log "已清除事件日志:$log"
}
$werPath = "$env:ProgramData\Microsoft\Windows\WER\ReportQueue"
if (Test-Path $werPath) {
Remove-Item -Path "$werPath\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Log "错误报告队列已清理"
}
# 5. 清理WinSxS
Write-Log "开始清理C盘WinSxS临时文件..."
$winSxSTemp = "$env:windir\WinSxS\Temp"
if (Test-Path $winSxSTemp) {
Remove-Item -Path "$winSxSTemp\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Log "WinSxS临时文件已清理"
}
Write-Log "正在执行C盘DISM清理..."
dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase | Out-Null
Write-Log "DISM清理完成"
# 6. 触发存储感知
Write-Log "正在触发C盘存储感知..."
rundll32.exe advapi32.dll,ProcessIdleTasks
Write-Log "存储感知已触发"
# 7. 清理缩略图缓存
Write-Log "正在清理C盘缩略图缓存..."
$thumbCache = "$env:LOCALAPPDATA\Microsoft\Windows\Explorer\thumbcache*.db"
if (Test-Path $thumbCache) {
Remove-Item -Path $thumbCache -Force -ErrorAction SilentlyContinue
Write-Log "缩略图缓存已清除"
}
# 8. 重置商店缓存
Write-Log "正在重置微软商店C盘缓存..."
$storeCache = "$env:LOCALAPPDATA\Packages\WinStore*"
if (Test-Path $storeCache) {
Remove-Item -Path $storeCache -Recurse -Force -ErrorAction SilentlyContinue
Write-Log "微软商店缓存已重置"
}
Write-Log "---------- 所有C盘清理操作已完成 ----------"
}
catch {
$errorMsg = "发生错误:{0}`n错误位置:{1}" -f $_.Exception.Message, $_.InvocationInfo.PositionMessage
Write-Log $errorMsg
throw $_
}
finally {
# 添加最终状态
Write-Log "操作结束,日志文件已保存到:$logFile"
Write-Host "C盘清理操作完成,请查看日志文件:$logFile"
}
然后,按下WIN+R输入taskschd.msc——>点击创建任务——>按照需求设置
也可以输入以下指令创建(注意:需要管理员运行Windows PowerShell、一部分一部分执行 ):
# 允许脚本执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
# 创建任务组件
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File C:\Scripts\DiskCleaner.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 2) -RestartCount 3
# 注册任务
Register-ScheduledTask -TaskName "Daily_Clean" -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM" -RunLevel Highest -Description "自动清理任务"
完成之后,手动运行查看是否成功。
注意文件需要保存为UTF-8编码格式保存,如果没有相关的软件更改保存格式,那就在Windows power shell管理员中输入以下指令来完成:
$filePath = "C:\Scripts\DiskCleaner.ps1"
if (Test-Path $filePath) {
$content = Get-Content -Path $filePath
Set-Content -Path $filePath -Value $content -Encoding UTF8 -Force
Write-Host "文件已重新保存为UTF-8编码"
} else {
Write-Error "指定的文件路径不存在:$filePath"
}
4、移动虚拟内存和清理休眠文件
虚拟内存:
按下WIN+X选择系统——>点击高级系统设置——>选择性能点击设置——>在高级中更改虚拟内存——>取消自动管理——>选择C盘勾选无分页文件,点击设置——>选择D盘勾选系统管理的大小,点击设置——>确定即可。
彻底关闭休眠:
powercfg /hibernate off
5、工具推荐
以上方式都没有让C盘瘦身,可以下载下面链接中的软件来查看C盘到底有哪些文件,然后确定是否可以删除。