一个 bat 脚本清 Windows 的 Temp 目录

Windows 用久了 C:\Users\<你>\AppData\Local\Temp 里能塞几 GB 垃圾——浏览器缓存、安装包解压残留、Office 恢复文件。用图形界面点很慢,一个 bat 脚本清完事。

最省事版本

用系统自带的 %TEMP% 变量,不用自己拼路径:

@echo off
setlocal

echo 当前用户: %USERNAME%
echo Temp 目录: %TEMP%

del /f /s /q "%TEMP%\*" >nul 2>&1
for /d %%p in ("%TEMP%\*") do rmdir /s /q "%%p" >nul 2>&1

echo 清理完成
pause

拆开看:

  • del /f /s /q — 强制、递归、静默删除文件
  • for /d ... rmdir /s /q — 遍历所有子目录并递归删除
  • >nul 2>&1 — 屏蔽所有输出(正在使用的文件删不掉会报一堆红字,太吵)

存成 clean-temp.bat,双击就跑。

显式指定用户 Temp

有时想清另一个账户的 Temp,或者用完整路径更保险:

@echo off
setlocal

set USER_NAME=%USERNAME%
set USER_TEMP=C:\Users\%USER_NAME%\AppData\Local\Temp

echo 清理目录: %USER_TEMP%

del /f /s /q "%USER_TEMP%\*" >nul 2>&1
for /d %%p in ("%USER_TEMP%\*") do rmdir /s /q "%%p" >nul 2>&1

echo 完成
pause

顺便清系统 Temp(需要管理员)

C:\Windows\Temp 里的东西也可以清,但必须以管理员运行

del /f /s /q "C:\Windows\Temp\*" >nul 2>&1
for /d %%p in ("C:\Windows\Temp\*") do rmdir /s /q "%%p" >nul 2>&1

自动申请管理员权限

想双击就自动 UAC 提升,脚本开头加:

@echo off
:: 检查是否管理员,不是就重新以管理员启动
net session >nul 2>&1
if %errorlevel% neq 0 (
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)

setlocal
del /f /s /q "%TEMP%\*" >nul 2>&1
for /d %%p in ("%TEMP%\*") do rmdir /s /q "%%p" >nul 2>&1
del /f /s /q "C:\Windows\Temp\*" >nul 2>&1
echo 完成
pause

计划任务:开机自动清

想让开机就跑:

schtasks /create /tn "CleanTemp" /tr "C:\path\to\clean-temp.bat" /sc onlogon

或者每天 3 点跑:

schtasks /create /tn "CleanTemp" /tr "C:\path\to\clean-temp.bat" /sc daily /st 03:00

删除任务:

schtasks /delete /tn "CleanTemp" /f

会看到的”报错”

跑完总有一堆”访问被拒绝”或”文件被占用”——这是正常的。有些文件是 Chrome、微信、系统服务在用,删不掉就是删不掉,重启后再跑一遍即可。

要看进度,把 >nul 2>&1 去掉就能看到每一步:

del /f /s /q "%TEMP%\*"

别做的事

  • 不要清 C:\Windows 下的其它目录,会把系统搞坏
  • 不要开 del /q "C:\*" /s,字面意思
  • 少用 rmdir /s /q C:\Windows\Temp 整个删掉目录本身——某些系统组件会因为找不到目录而报错

一句话总结

del %TEMP%\* + for /d %%p rmdir %%p 就是 Temp 清理的核心两行。加个自动 UAC 和计划任务,就能忘掉这事。