清理用户临时目录、浏览器缓存、崩溃转储等临时文件,被占用的文件自动跳过。
# -*- coding: utf-8 -*-
"""
清理临时文件脚本 (clean_temp_files.py)
功能:清理用户临时目录、浏览器缓存、崩溃转储等临时文件
用法:python clean_temp_files.py
说明:正在被占用的文件会被自动跳过,不会影响系统
"""
import os
import shutil
import ctypes
import time
# 判断是否管理员权限
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin() != 0
except Exception:
return False
def get_dir_size(path):
"""统计目录大小(字节)"""
total = 0
for root, dirs, files in os.walk(path):
for f in files:
try:
total += os.path.getsize(os.path.join(root, f))
except OSError:
pass
return total
def clean_dir(path, name):
"""清理目录内容,返回 (删除字节数, 跳过文件数)"""
if not os.path.exists(path):
print(f"[跳过] {name} : 目录不存在 - {path}")
return 0, 0
before = get_dir_size(path)
skipped = 0
# 删除所有文件
for root, dirs, files in os.walk(path, topdown=False):
for f in files:
fp = os.path.join(root, f)
try:
os.remove(fp)
except OSError:
skipped += 1
for d in dirs:
dp = os.path.join(root, d)
try:
shutil.rmtree(dp, ignore_errors=False)
except OSError:
pass
after = get_dir_size(path)
deleted = before - after
if deleted < 0:
deleted = 0
deleted_mb = round(deleted / (1024 * 1024), 1)
status = f"跳过 {skipped} 个占用文件" if skipped > 0 else "全部清理"
print(f"[完成] {name} : 释放 {deleted_mb} MB ({status})")
return deleted, skipped
def main():
print("===== 开始清理临时文件 =====")
admin = is_admin()
print(f"管理员权限: {admin}\n")
local = os.environ.get("LOCALAPPDATA", os.path.expanduser("~\\AppData\\Local"))
targets = {
"用户临时目录": os.path.join(local, "Temp"),
"崩溃转储": os.path.join(local, "CrashDumps"),
"Edge缓存": os.path.join(local, "Microsoft", "Edge", "User Data", "Default", "Cache"),
"Chrome缓存": os.path.join(local, "Google", "Chrome", "User Data", "Default", "Cache"),
"缩略图缓存": os.path.join(local, "Microsoft", "Windows", "Explorer"),
}
total_deleted = 0
total_skipped = 0
for name, path in targets.items():
d, s = clean_dir(path, name)
total_deleted += d
total_skipped += s
# 系统临时目录(需要管理员)
if admin:
sys_temp = os.path.join(os.environ.get("SystemRoot", "C:\\Windows"), "Temp")
if os.path.exists(sys_temp):
d, s = clean_dir(sys_temp, "系统临时目录")
total_deleted += d
total_skipped += s
else:
print("[提示] 系统临时目录需要管理员权限,未清理(可以管理员身份运行本脚本)")
print("\n===== 清理完成 =====")
total_mb = round(total_deleted / (1024 * 1024), 1)
print(f"共释放: {total_mb} MB")
print(f"跳过占用文件: {total_skipped} 个")
print("\n按任意键退出...")
try:
input()
except EOFError:
time.sleep(2)
if __name__ == "__main__":
main()