C盘自动清理缓存工具

2025-11-22 47 11/22

自动清理缓存的小软件,在单位办公时候总是卡的动不了,所以我想着用python做一个可以自动清理缓存的软件

我使用的PyQt5进行可视化,点击开始后可实现自动清理,不需要手动输入%temp%了
相对来说方便一点

然后我已经打包成exe文件了,不需要代码的兄弟们直接下载食用即可

夸克链接:https://pan.quark.cn/s/98f7f81b2578

百度链接:https://pan.baidu.com/s/1ggm6PQbXITeTJbtiQ94TkQ?pwd=fuw9

源代码

import os
import shutil
import time
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton,
                             QTextEdit, QVBoxLayout, QHBoxLayout,
                             QWidget, QLabel, QProgressBar)
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QFont
import pyautogui
import pygetwindow as gw
 
 
class CleanThread(QThread):
    """清理线程,避免界面卡顿"""
    log_signal = pyqtSignal(str)  # 发送日志信息
    progress_signal = pyqtSignal(int)  # 发送进度
    finished_signal = pyqtSignal()  # 清理完成信号
 
    def run(self):
        try:
            # 获取临时文件夹路径
            temp_path = os.environ.get('TEMP', '')
            if not temp_path or not os.path.exists(temp_path):
                self.log_signal.emit("❌ 无法获取临时文件夹路径")
                self.finished_signal.emit()
                return
 
            self.log_signal.emit(f"📂 临时文件夹路径: {temp_path}")
            self.log_signal.emit("▶️ 开始模拟打开临时文件夹...")
 
            # 模拟Win+R打开运行窗口
            try:
                pyautogui.hotkey('win', 'r')
                self.log_signal.emit("✅ 已打开运行窗口")
                time.sleep(1)
 
                # 输入%temp%并回车
                pyautogui.typewrite('%temp%')
                pyautogui.press('enter')
                self.log_signal.emit("✅ 已打开临时文件夹")
                time.sleep(2)  # 等待文件夹打开
            except Exception as e:
                self.log_signal.emit(f"❌ 打开临时文件夹失败: {str(e)}")
                self.finished_signal.emit()
                return
 
            # 开始清理文件
            self.log_signal.emit("\n🔍 开始扫描并清理文件...")
            items = os.listdir(temp_path)
            total = len(items)
            file_count = 0
            folder_count = 0
 
            # 先删除文件
            for i, item in enumerate(items):
                # 更新进度
                progress = int((i / total) * 50)  # 前50%进度用于删除文件
                self.progress_signal.emit(progress)
 
                item_path = os.path.join(temp_path, item)
                try:
                    if os.path.isfile(item_path) or os.path.islink(item_path):
                        os.unlink(item_path)
                        file_count += 1
                        self.log_signal.emit(f"🗑️ 已删除文件: {item}")
                except Exception as e:
                    self.log_signal.emit(f"⚠️ 无法删除文件 {item}: {str(e)}")
                time.sleep(0.01)
 
            # 再删除文件夹
            folders = [item for item in os.listdir(temp_path) if os.path.isdir(os.path.join(temp_path, item))]
            folder_total = len(folders)
            for i, item in enumerate(folders):
                # 更新进度(后50%用于删除文件夹)
                progress = 50 + int((i / folder_total) * 50) if folder_total > 0 else 100
                self.progress_signal.emit(progress)
 
                item_path = os.path.join(temp_path, item)
                try:
                    shutil.rmtree(item_path)
                    folder_count += 1
                    self.log_signal.emit(f"📁 已删除文件夹: {item}")
                except Exception as e:
                    self.log_signal.emit(f"⚠️ 无法删除文件夹 {item}: {str(e)}")
                time.sleep(0.01)
 
            # 关闭临时文件夹窗口
            try:
                for window in gw.getAllWindows():
                    if "temp" in window.title.lower() or "临时文件夹" in window.title:
                        window.close()
                        self.log_signal.emit("\n✅ 已关闭临时文件夹窗口")
                        break
            except Exception as e:
                self.log_signal.emit(f"⚠️ 关闭窗口失败: {str(e)}")
 
            # 清理结果
            self.log_signal.emit(f"\n🎉 清理完成!")
            self.log_signal.emit(f"📊 共删除 {file_count} 个文件和 {folder_count} 个文件夹")
            self.log_signal.emit("💡 提示:部分正在使用的文件/文件夹可能未被删除,这是正常现象")
 
        except Exception as e:
            self.log_signal.emit(f"❌ 清理过程中发生错误: {str(e)}")
        finally:
            self.progress_signal.emit(100)
            self.finished_signal.emit()
 
 
class TempCleanerUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()
 
    def init_ui(self):
        # 窗口基本设置
        self.setWindowTitle("临时文件清理工具")
        self.setGeometry(300, 200, 800, 600)
        self.setMinimumSize(600, 500)
 
        # 中心部件和布局
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        main_layout = QVBoxLayout(central_widget)
        main_layout.setContentsMargins(20, 20, 20, 20)
        main_layout.setSpacing(15)
 
        # 标题
        title_label = QLabel("临时文件清理工具")
        title_font = QFont("微软雅黑", 16, QFont.Bold)
        title_label.setFont(title_font)
        title_label.setAlignment(Qt.AlignCenter)
        main_layout.addWidget(title_label)
 
        # 说明文字
        desc_label = QLabel(
            "此工具将自动打开系统临时文件夹并清理其中的文件。清理过程中请不要操作电脑,以免影响自动化流程。")
        desc_label.setWordWrap(True)
        desc_label.setFont(QFont("微软雅黑", 10))
        desc_label.setStyleSheet("color: #666;")
        main_layout.addWidget(desc_label)
 
        # 按钮区域
        btn_layout = QHBoxLayout()
        self.start_btn = QPushButton("开始清理")
        self.start_btn.setFont(QFont("微软雅黑", 12))
        self.start_btn.setStyleSheet("""
            QPushButton {
                background-color: #2196F3;
                color: white;
                padding: 10px 20px;
                border-radius: 5px;
            }
            QPushButton:disabled {
                background-color: #cccccc;
            }
        """)
        self.start_btn.clicked.connect(self.start_cleaning)
        btn_layout.addWidget(self.start_btn)
        btn_layout.addStretch()
        main_layout.addLayout(btn_layout)
 
        # 进度条
        self.progress_bar = QProgressBar()
        self.progress_bar.setStyleSheet("""
            QProgressBar {
                border: 1px solid #bbb;
                border-radius: 4px;
                text-align: center;
                height: 20px;
            }
            QProgressBar::chunk {
                background-color: #2196F3;
                width: 10px;
            }
        """)
        self.progress_bar.setValue(0)
        main_layout.addWidget(self.progress_bar)
 
        # 日志区域
        log_label = QLabel("清理日志:")
        log_label.setFont(QFont("微软雅黑", 11, QFont.Bold))
        main_layout.addWidget(log_label)
 
        self.log_text = QTextEdit()
        self.log_text.setReadOnly(True)
        self.log_text.setFont(QFont("Consolas", 10))
        self.log_text.setStyleSheet("background-color: #f9f9f9; border: 1px solid #ddd; border-radius: 4px;")
        main_layout.addWidget(self.log_text)
 
        # 状态标签
        self.status_label = QLabel("就绪")
        self.status_label.setFont(QFont("微软雅黑", 9))
        self.status_label.setStyleSheet("color: #666;")
        main_layout.addWidget(self.status_label)
 
        # 初始化线程
        self.clean_thread = None
 
    def start_cleaning(self):
        if self.clean_thread and self.clean_thread.isRunning():
            self.log_text.append("⚠️ 清理正在进行中,请不要重复点击!")
            return
 
        # 重置状态
        self.log_text.clear()
        self.progress_bar.setValue(0)
        self.start_btn.setEnabled(False)
        self.start_btn.setText("清理中...")
        self.status_label.setText("状态:清理进行中...")
 
        # 启动清理线程
        self.clean_thread = CleanThread()
        self.clean_thread.log_signal.connect(self.append_log)
        self.clean_thread.progress_signal.connect(self.update_progress)
        self.clean_thread.finished_signal.connect(self.clean_finished)
        self.clean_thread.start()
 
    def append_log(self, message):
        """添加日志到文本框并自动滚动到底部"""
        self.log_text.append(message)
        self.log_text.moveCursor(self.log_text.textCursor().End)
 
    def update_progress(self, value):
        """更新进度条"""
        self.progress_bar.setValue(value)
 
    def clean_finished(self):
        """清理完成后恢复状态"""
        self.start_btn.setEnabled(True)
        self.start_btn.setText("开始清理")
        self.status_label.setText("状态:清理完成")
 
 
if __name__ == "__main__":
    # 确保中文显示正常
    QApplication.setApplicationName("临时文件清理工具")
    app = QApplication(sys.argv)
    window = TempCleanerUI()
    window.show()
    sys.exit(app.exec_())

 

 

- THE END -
0

免责申明:本站不以盈利为目的,下载资源均来源于网络,只做学习和交流使用,版权归原作者所有。若作商业用途,请购买正版。由于未及时购买
和付费发生的侵权行为,与本站无关。如果侵犯了您的合法权益,请联系522390482@qq.com删除,提供版权证明文件和侵权内容的具体链接。

共有 0 条评论