下载 C盘安全清理.bat
4.5 KB · Windows 10 / 11
01清什么,不清什么
会清掉的,都是删了也会自己再生成的东西:
- Windows 系统临时文件、当前用户的临时文件
- Chrome、Edge 所有账号的网页缓存和代码缓存
- calibre 缓存、Windows 错误报告
- Windows Update 已经装完的更新安装包
- Conda 的包缓存(装了 Miniconda / Anaconda 才会动)
- C 盘的系统还原点——可选,会单独问你,选 N 就不动
不会动的:浏览器的历史记录、Cookie、密码、书签、扩展,桌面和文档里的个人文件。
02怎么用
- 先关掉 Chrome 和 Edge,正在用的缓存删不掉。
- 双击下载的
C盘安全清理.bat,它会自己申请管理员权限,点“是”。 - 看完清单按
Y继续,按N取消。 - 接着问要不要删系统还原点:
Y删,N保留、只做其它清理。拿不准就选 N。 - 跑完会显示清理前后的剩余空间和这次腾出了多少。
下载时浏览器可能会提示“此类文件可能有害”,双击时 Windows 可能弹出“已保护你的电脑”——这是所有网上下载的 .bat 都会有的提示,不是报毒。不放心的话,右键用记事本打开,逐行看一遍再运行;下面也贴了全文。
03还原点要不要删
系统还原点往往是 C 盘里最占地方的一块,删掉一下就能多出几个到几十个 G。但删了就回不去:之后装坏了驱动、中了毒,想回滚到之前的状态就没得回滚。
所以这一步单独问,默认建议选 N。电脑最近一切正常、又实在缺空间,再选 Y。
想留一手的话,也可以用 Windows 自带的“磁盘清理”:选 C 盘 → 清理系统文件 → 其他选项 → 系统还原和卷影复制 → 清理。它会保留最近一个还原点,只删更早的。
删还原点用的是系统命令
vssadmin delete shadows。勒索病毒也爱用这条命令,所以个别杀毒软件可能把这个文件误报成病毒。源码全在下面,可以自己核对。
看源码(122 行)
@echo off
setlocal EnableExtensions
chcp 65001 >nul
title C盘安全清理
rem Relaunch with administrator rights when needed.
net session >nul 2>&1
if not "%errorlevel%"=="0" (
echo 正在申请管理员权限...
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath '%~f0' -Verb RunAs"
exit /b
)
echo ============================================================
echo C盘安全清理工具
echo ============================================================
echo.
echo 将清理:
echo 1. Windows 和当前用户的临时文件
echo 2. Chrome/Edge 缓存及代码缓存
echo 3. Windows Update 下载缓存、错误报告
echo 4. calibre 缓存和 Conda 包缓存(如存在)
echo 5. C盘全部系统还原点(可选,下面单独询问)
echo.
echo 不会清理 Chrome/Edge 的历史记录、Cookie、密码、书签、
echo 登录资料、扩展数据,也不会删除个人文档。
echo.
echo 建议先关掉 Chrome 和 Edge,正在用的缓存文件删不掉。
echo.
choice /C YN /N /M "确认执行吗?输入 Y 继续,N 取消:"
if errorlevel 2 (
echo.
echo 已取消,没有进行清理。
pause
exit /b
)
echo.
echo ------------------------------------------------------------
echo 是否同时删除 C盘全部系统还原点?
echo 通常能多腾出几个到几十个 GB,但删除后无法撤销,
echo 系统出问题时将无法回滚到之前的还原点。
echo ------------------------------------------------------------
set "DEL_SHADOWS=0"
choice /C YN /N /M "删除系统还原点吗?输入 Y 删除,N 保留(只做其它清理):"
if not errorlevel 2 set "DEL_SHADOWS=1"
for /f %%A in ('powershell.exe -NoProfile -Command "[int64](Get-PSDrive -Name C).Free"') do set "FREE_BEFORE=%%A"
echo.
echo [1/7] 清理 Windows 临时文件...
call :ClearDirectory "%SystemRoot%\SystemTemp"
call :ClearDirectory "%SystemRoot%\Temp"
echo [2/7] 清理当前用户临时文件...
call :ClearDirectory "%TEMP%"
echo [3/7] 清理 Chrome 和 Edge 缓存...
for /d %%P in ("%LOCALAPPDATA%\Google\Chrome\User Data\*") do (
call :ClearDirectory "%%~fP\Cache"
call :ClearDirectory "%%~fP\Code Cache"
)
for /d %%P in ("%LOCALAPPDATA%\Microsoft\Edge\User Data\*") do (
call :ClearDirectory "%%~fP\Cache"
call :ClearDirectory "%%~fP\Code Cache"
)
echo [4/7] 清理应用缓存和错误报告...
call :ClearDirectory "%LOCALAPPDATA%\calibre-cache"
call :ClearDirectory "%ProgramData%\Microsoft\Windows\WER"
echo [5/7] 清理 Windows Update 下载缓存...
net stop wuauserv /y >nul 2>&1
net stop bits /y >nul 2>&1
call :ClearDirectory "%SystemRoot%\SoftwareDistribution\Download"
net start bits >nul 2>&1
net start wuauserv >nul 2>&1
echo [6/7] 使用 Conda 自带命令清理包缓存...
call :CleanConda "%USERPROFILE%\Miniconda3\Scripts\conda.exe"
call :CleanConda "%USERPROFILE%\Anaconda3\Scripts\conda.exe"
if "%DEL_SHADOWS%"=="1" (
echo [7/7] 删除 C盘全部系统还原点...
vssadmin.exe delete shadows /for=C: /all /quiet >nul 2>&1
) else (
echo [7/7] 已按你的选择保留系统还原点,跳过。
)
rem Ensure update-related services are not left stopped.
net start bits >nul 2>&1
net start wuauserv >nul 2>&1
for /f %%A in ('powershell.exe -NoProfile -Command "[int64](Get-PSDrive -Name C).Free"') do set "FREE_AFTER=%%A"
echo.
echo ============================================================
echo 清理完成。
powershell.exe -NoProfile -Command "$before=[int64]'%FREE_BEFORE%'; $after=[int64]'%FREE_AFTER%'; Write-Host ('清理前剩余空间:{0:N2} GB' -f ($before/1GB)); Write-Host ('清理后剩余空间:{0:N2} GB' -f ($after/1GB)); Write-Host ('本次实际释放: {0:N2} GB' -f (($after-$before)/1GB))"
echo.
echo 提示:正在运行的程序可能锁定少量缓存文件,这些文件会被跳过。
echo Chrome/Edge 历史记录、Cookie、密码和书签未被删除。
echo ============================================================
pause
exit /b
:ClearDirectory
set "CLEAN_TARGET=%~1"
if not defined CLEAN_TARGET exit /b
if not exist "%CLEAN_TARGET%" exit /b
rem 路径太短(比如 C:\)或指到用户目录、系统目录本身时跳过,防止环境变量异常时误删。
if "%CLEAN_TARGET:~3%"=="" exit /b
if /i "%CLEAN_TARGET%"=="%USERPROFILE%" exit /b
if /i "%CLEAN_TARGET%"=="%SystemRoot%" exit /b
del /f /s /q "%CLEAN_TARGET%\*" >nul 2>&1
for /d %%D in ("%CLEAN_TARGET%\*") do rd /s /q "%%~fD" >nul 2>&1
exit /b
:CleanConda
if not exist "%~1" exit /b
"%~1" clean --all -y >nul 2>&1
exit /b