From 438523c0eab55637caf8db5593acea5ecb92f13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=99=E5=90=9B=E5=BE=A1?= Date: Tue, 19 Nov 2024 16:30:09 +0800 Subject: [PATCH] up --- .gitignore | 17 -- dir.py | 77 ------- main.py | 585 ++++++++++++++++++++++++++++++++++++++++++++--- main.spec | 38 --- 清除图标缓存.bat | 28 --- 5 files changed, 557 insertions(+), 188 deletions(-) delete mode 100644 .gitignore delete mode 100644 dir.py delete mode 100644 main.spec delete mode 100644 清除图标缓存.bat diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 42854f9..0000000 --- a/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ - -__pycache__/ -build/ -dist/ -*.egg-info/ -*.egg -*.pyc -*.pyo -*.pyd -*.so -*.pyd -*.dll -*.dylib -*.lib -*.exp -*.ilk -*.pdb \ No newline at end of file diff --git a/dir.py b/dir.py deleted file mode 100644 index 8790657..0000000 --- a/dir.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: UTF-8 -*- -import os -import chardet - -log = 0 #是否打印日志 -workPath = os.getcwd() #工作路径 - -# 读取配置文件 -def read_config_file(): - confList = [] #配置文件路径列表 - # 遍历目录 - for root, dirs, files in os.walk(workPath): - for file in files: - # 检查文件是否以.conf结尾 - if file.endswith(".conf"): - if log:print(os.path.join(root, file)) - confList.append(os.path.join(root, file)) - return confList - -# 处理目录结构 -def config_dir_structure(confPath): - # 自动检测文件编码 - with open(confPath, 'rb') as f: - raw_data = f.read() - result = chardet.detect(raw_data) - encoding = result['encoding'] - # 读取配置文件 - with open(confPath, 'r', encoding=encoding) as f: - lines = f.readlines() - if lines: - # 处理目录结构 - for line in lines: - root = {} - stack = [(root, -1)] # 栈存储元组 (当前节点, 当前缩进级别) - for line in lines: - if not line.strip(): - continue - # 计算当前行的缩进级别 - indent_level = len(line) - len(line.lstrip()) - # 获取当前目录名称 - directory_name = line.strip() - # 在栈中找到合适的父节点 - while stack and stack[-1][1] >= indent_level: - stack.pop() - # 父节点是栈中的最后一个元素 - parent, _ = stack[-1] - # 将当前目录添加到父节点的字典中 - parent[directory_name] = {} - # 将当前目录和其缩进级别推送到栈中 - stack.append((parent[directory_name], indent_level)) - return root - else: - return None - -# 创建目录结构 -def create_folders(base_path, structure): - for folder, substructure in structure.items(): - current_path = os.path.join(base_path, folder) - os.makedirs(current_path, exist_ok=True) - if isinstance(substructure, dict): - create_folders(current_path, substructure) - -# 配置选择器 -def run_config_selector(confList): - # 根据配置文件列表创建input选择器 - print("请选择配置文件:") - for i, conf in enumerate(confList): - print(f"{i+1}. {conf}") - temp = input("请输入选项:") - # 整数 - if temp.isdigit(): - choice = int(temp) - if choice in range(1, len(confList)+1): - return confList[choice-1] - else: - return None - \ No newline at end of file diff --git a/main.py b/main.py index 7bfa3b3..6ace39b 100644 --- a/main.py +++ b/main.py @@ -1,36 +1,565 @@ # -*- coding: UTF-8 -*- import os -import dir as dir +import tkinter as tk +from tkinter import ttk, messagebox, simpledialog +import json +from typing import Dict, Optional +from PIL import Image +import subprocess +import shutil -def run(): - # 读取配置文件 - conFigList = dir.read_config_file() - if not conFigList: - print('[没有找到配置文件]') - input('请按任意键退出...') - else: - # 选择运行配置 - data = dir.run_config_selector(conFigList) - if not data: - os.system('cls') - print('[配置文件不存在]\n') - run() - else: - # 处理目录结构 - dirDict = dir.config_dir_structure(data) - os.system('cls') - if not dirDict: - print('[配置文件为空]\n') - run() +class ConfigEditorGUI: + def __init__(self, root): + self.root = root + self.root.title("目录配置编辑器") + self.root.geometry("800x600") + + # 设置基本样式 + style = ttk.Style() + style.configure("Treeview", rowheight=25) + style.configure("TButton", padding=5) + + # 当前编辑的配置文件名 + self.current_file: Optional[str] = None + # 存储目录结构的字典 + self.folder_structure: Dict = {} + + # 添加图标缓存字典 + self.icon_cache = {} + + self._init_ui() + self._load_configs() + + def _init_ui(self): + """初始化用户界面""" + # 创建主框架 + self.main_frame = ttk.Frame(self.root, padding="10") + self.main_frame.pack(fill=tk.BOTH, expand=True) + + # 顶部工具栏 + self._create_toolbar() + + # 创建左右分栏 + self.paned = ttk.PanedWindow(self.main_frame, orient=tk.HORIZONTAL) + self.paned.pack(fill=tk.BOTH, expand=True, pady=(10, 0)) + + # 左侧配置文件列表 + self._create_config_list() + + # 右侧目录树编辑器 + self._create_tree_editor() + + def _create_toolbar(self): + """创建顶部工具栏""" + toolbar = ttk.Frame(self.main_frame) + toolbar.pack(fill=tk.X, pady=(0, 10)) + + ttk.Button(toolbar, text="新建配置", command=self._new_config).pack(side=tk.LEFT, padx=5) + ttk.Button(toolbar, text="删除配置", command=self._delete_config).pack(side=tk.LEFT, padx=5) + ttk.Button(toolbar, text="创建目录", command=self._create_folders).pack(side=tk.LEFT, padx=5) + + def _create_config_list(self): + """创建左侧配置文件列表""" + list_frame = ttk.LabelFrame(self.paned, text="配置文件", padding="5") + self.paned.add(list_frame, weight=1) + + # 配置文件列表 + self.config_listbox = tk.Listbox(list_frame) + self.config_listbox.pack(fill=tk.BOTH, expand=True) + self.config_listbox.bind('<>', self._on_config_select) + + def _set_folder_icon(self): + """设置文件夹图标""" + selected = self.tree.selection() + if not selected or self.tree.item(selected[0])['text'] == '根目录': + return + + # 创建图标选择对话框 + icon_dialog = tk.Toplevel(self.root) + icon_dialog.title("选择图标") + icon_dialog.geometry("600x400") + icon_dialog.transient(self.root) # 设置为模态对话框 + icon_dialog.grab_set() # 禁止与其他窗口交互 + + # 设置最小窗口大小 + icon_dialog.minsize(400, 300) + + # 将窗口居中显示 + icon_dialog.update_idletasks() # 更新窗口大小 + width = icon_dialog.winfo_width() + height = icon_dialog.winfo_height() + x = (icon_dialog.winfo_screenwidth() // 2) - (width // 2) + y = (icon_dialog.winfo_screenheight() // 2) - (height // 2) + icon_dialog.geometry(f'+{x}+{y}') + + # 创建主框架 + main_frame = ttk.Frame(icon_dialog, padding="10") + main_frame.pack(fill=tk.BOTH, expand=True) + + # 创建标题标签 + ttk.Label( + main_frame, + text="选择要应用的图标:", + font=('微软雅黑', 10) + ).pack(anchor='w', pady=(0, 10)) + + # 创建图标显示区域 + icon_frame = ttk.Frame(main_frame) + icon_frame.pack(fill=tk.BOTH, expand=True) + + # 创建画和滚动条 + canvas = tk.Canvas(icon_frame, bg='white') + scrollbar = ttk.Scrollbar(icon_frame, orient=tk.VERTICAL, command=canvas.yview) + + # 创建用于放置图标的框架 + scrollable_frame = ttk.Frame(canvas) + scrollable_frame.bind( + "", + lambda e: canvas.configure(scrollregion=canvas.bbox("all")) + ) + + # 创建画布窗口 + canvas_window = canvas.create_window((0, 0), window=scrollable_frame, anchor="nw") + + # 配置画布随窗口调整大小 + def on_canvas_configure(event): + canvas.itemconfig(canvas_window, width=event.width) + canvas.bind('', on_canvas_configure) + + # 配置画布滚动 + canvas.configure(yscrollcommand=scrollbar.set) + + # 打包滚动组件 + canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + # 创建网格框架 + grid_frame = ttk.Frame(scrollable_frame) + grid_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + def on_icon_click(path): + self._apply_icon(selected[0], path) + icon_dialog.destroy() + + # 添加"无图标"选项 + no_icon_frame = ttk.Frame(grid_frame) + no_icon_frame.grid(row=0, column=0, padx=5, pady=5, sticky='nsew') + + ttk.Button( + no_icon_frame, + text="无图标", + width=10, + command=lambda: on_icon_click(None) + ).pack(pady=2) + ttk.Label(no_icon_frame, text="默认").pack() + + # 加载实际图标 + icon_count = 1 # 从1开始计数,因为0被"无图标"占用 + for file in os.listdir('icons'): + if file.lower().endswith(('.ico', '.png')): + try: + icon_path = os.path.join('icons', file) + if file.lower().endswith('.png'): + # 创建预览图标(64x64) + preview_size = 64 + original_icon = tk.PhotoImage(file=icon_path) + + # 计算缩放比例 + scale = min(preview_size / original_icon.height(), preview_size / original_icon.width()) + scaled_w = int(original_icon.width() * scale) + scaled_h = int(original_icon.height() * scale) + + if scaled_w > 0 and scaled_h > 0: + # 创建预览图标 + preview_icon = original_icon.subsample( + max(1, original_icon.width() // scaled_w), + max(1, original_icon.height() // scaled_h) + ) + + # 创建图标按钮框架 + btn_frame = ttk.Frame(grid_frame) + row = icon_count // 4 # 每行4个图标 + col = icon_count % 4 + btn_frame.grid(row=row, column=col, padx=10, pady=10, sticky='nsew') + + # 创建图标按钮 + btn = ttk.Button( + btn_frame, + image=preview_icon, + command=lambda p=icon_path: on_icon_click(p) + ) + btn.image = preview_icon # 保持引用 + btn.pack(pady=2) + + # 显示文件名(限制长度) + name = file if len(file) <= 15 else file[:12] + '...' + ttk.Label(btn_frame, text=name).pack() + + icon_count += 1 + + except Exception as e: + print(f"无法加载图标 {file}: {str(e)}") + + # 配置网格列的权重 + for i in range(4): + grid_frame.grid_columnconfigure(i, weight=1) + + # 添加底部按钮框架 + button_frame = ttk.Frame(main_frame) + button_frame.pack(fill=tk.X, pady=(10, 0)) + + ttk.Button( + button_frame, + text="取消", + command=icon_dialog.destroy + ).pack(side=tk.RIGHT) + + # 绑定ESC键关闭窗口 + icon_dialog.bind('', lambda e: icon_dialog.destroy()) + + def _apply_icon(self, item_id: str, icon_path: str): + """应用选择的图标到文件夹""" + try: + if icon_path is None: + # 移除图标 + self.tree.item(item_id, image='') + # 更新配置 + path = self._get_item_path(item_id) + current = self.folder_structure.get('folders', {}) + for p in path[1:]: + if p not in current: + current[p] = {} + current = current[p] + if not isinstance(current, dict): + current = {} + + # 移除图标配置 + if isinstance(current, dict) and '_icon' in current: + del current['_icon'] else: - # 创建目录 - base_path = '.' - dir.create_folders(base_path, dirDict) - print('[目录创建成功]\n') - run() + # 原有的图标设置逻辑 + rel_path = os.path.relpath(icon_path) + if rel_path not in self.icon_cache: + self.icon_cache[rel_path] = tk.PhotoImage(file=icon_path) + self.tree.item(item_id, image=self.icon_cache[rel_path]) + + path = self._get_item_path(item_id) + current = self.folder_structure.get('folders', {}) + for p in path[1:]: + if p not in current: + current[p] = {} + current = current[p] + if not isinstance(current, dict): + current = {} + + current['_icon'] = rel_path + + # 保存配置 + self._auto_save() + + except Exception as e: + messagebox.showerror("错误", f"设置图标失败: {str(e)}") + print(f"错误详情: {str(e)}") + + def _get_item_path(self, item_id: str) -> list: + """获取树节点的完整路径""" + path = [] + while item_id: + path.insert(0, self.tree.item(item_id)['text']) + item_id = self.tree.parent(item_id) + return path + + def _create_tree_editor(self): + """创建右侧目录树编辑器""" + editor_frame = ttk.LabelFrame(self.paned, text="目录结构", padding="5") + self.paned.add(editor_frame, weight=3) + + self.tree = ttk.Treeview(editor_frame, selectmode='browse') + self.tree.pack(fill=tk.BOTH, expand=True) + + # 右键菜单 + self.context_menu = tk.Menu(self.root, tearoff=0) + self.context_menu.add_command(label="添加子目录", command=self._add_subfolder) + self.context_menu.add_command(label="设置图标", command=self._set_folder_icon) + self.context_menu.add_command(label="删除", command=self._delete_folder) + + self.tree.bind("", self._show_context_menu) + + def _load_configs(self): + """加载所有配置文件""" + self.config_listbox.delete(0, tk.END) + for file in os.listdir('.'): + if file.endswith('.json'): + self.config_listbox.insert(tk.END, file) + + def _on_config_select(self, event): + """当选择配置文件时触发""" + selection = self.config_listbox.curselection() + if selection: + filename = self.config_listbox.get(selection[0]) + self._load_config_file(filename) + + def _load_config_file(self, filename: str): + """加载指定的配置文件""" + try: + with open(filename, 'r', encoding='utf-8') as f: + self.folder_structure = json.load(f) + self.current_file = filename + self._update_tree() + except Exception as e: + messagebox.showerror("错误", f"无法加载配置文件: {str(e)}") + + def _update_tree(self): + """更新目录树显示""" + self.tree.delete(*self.tree.get_children()) + folders = self.folder_structure.get('folders', {}) + # 添加根节点 + root = self.tree.insert('', 'end', text='根目录') + self._build_tree(root, folders) + + def _build_tree(self, parent: str, folders: Dict): + """递归构建目录树""" + for folder, content in folders.items(): + # 检查是否有图标设置 + icon = None + if isinstance(content, dict) and '_icon' in content: + icon_path = content['_icon'] + try: + if icon_path not in self.icon_cache: + self.icon_cache[icon_path] = tk.PhotoImage(file=icon_path) + icon = self.icon_cache[icon_path] + except Exception as e: + print(f"无法加载图标 {icon_path}: {str(e)}") + + # 根据是否有图标来决定传递的参数 + if icon: + folder_id = self.tree.insert(parent, 'end', text=folder, image=icon) + else: + folder_id = self.tree.insert(parent, 'end', text=folder) + + if isinstance(content, dict): + # 过滤掉元数据键 + subfolders = {k: v for k, v in content.items() if not k.startswith('_')} + if subfolders: + self._build_tree(folder_id, subfolders) + + def _show_context_menu(self, event): + """显示右键菜单""" + item = self.tree.identify_row(event.y) + if item: + self.tree.selection_set(item) + self.context_menu.post(event.x_root, event.y_root) + + def _add_subfolder(self): + """添加子目录""" + selected = self.tree.selection() + if selected: + name = simpledialog.askstring("新建目录", "请输入目录名:") + if name: + # 添加新节点 + new_item = self.tree.insert(selected[0], 'end', text=name) + # 展开父节点 + self.tree.item(selected[0], open=True) + # 选中新节点 + self.tree.selection_set(new_item) + # 确保新节点���见 + self.tree.see(new_item) + # 立即保存更改 + self.folder_structure = {"folders": self._get_folder_structure('')} + self._auto_save() + + def _delete_folder(self): + """删除选中的目录""" + selected = self.tree.selection() + if selected and self.tree.item(selected[0])['text'] != '根目录': + self.tree.delete(selected[0]) + # 立即保存更改 + self.folder_structure = {"folders": self._get_folder_structure('')} + self._auto_save() + + def _auto_save(self): + """自动存当前配置""" + if not self.current_file: + return + + try: + with open(self.current_file, 'w', encoding='utf-8') as f: + json.dump(self.folder_structure, f, indent=4, ensure_ascii=False) + except Exception as e: + messagebox.showerror("错误", f"自动保存失败: {str(e)}") + + def _new_config(self): + """创建新配置文件""" + filename = simpledialog.askstring("新建配置", "请输入配置文件名:") + if filename: + if not filename.endswith('.json'): + filename += '.json' + self.folder_structure = { + "folders": { + "新文件夹": {} + } + } + self.current_file = filename + self._auto_save() + self._load_configs() + self._update_tree() + + def _get_folder_structure(self, node: str) -> Dict: + """递归获取目录结构""" + structure = {} + children = self.tree.get_children(node) + for child in children: + item = self.tree.item(child) + child_text = item['text'] + # 跳过根节 + if child_text == '根目录': + structure = self._get_folder_structure(child) + else: + # 修改结构以匹配创建函数的预期格式 + subfolders = self._get_folder_structure(child) + if subfolders: + structure[child_text] = subfolders + else: + structure[child_text] = {} + return structure + + def _create_folders(self): + """创建实际的目录结构""" + if not self.current_file: + messagebox.showwarning("警告", "请先选择或创建配置文件") + return + + try: + folders = self._get_folder_structure( + next(iter(self.tree.get_children(''))) # 获取根节点 + ) + create_folders('.', folders, self.current_file) + messagebox.showinfo("成功", "目录结构创建完成") + except Exception as e: + messagebox.showerror("错误", f"创建目录失败: {str(e)}") + + def _delete_config(self): + """删除当前选中的配置文件""" + selection = self.config_listbox.curselection() + if not selection: + messagebox.showwarning("警告", "请先选择要删除的配置文件") + return + + filename = self.config_listbox.get(selection[0]) + if messagebox.askyesno("确认删除", f"确定要删除配置文件 {filename} 吗?"): + try: + os.remove(filename) + self._load_configs() # 重新加载配置文件列表 + + # 如果删除的是当前打开的配置文件,清空树形视图 + if filename == self.current_file: + self.current_file = None + self.folder_structure = {} + self.tree.delete(*self.tree.get_children()) + except Exception as e: + messagebox.showerror("错误", f"删除失败: {str(e)}") + +def init_icon_dir() -> None: + """初始化图标目录""" + icon_dir = "图标" + if not os.path.exists(icon_dir): + os.makedirs(icon_dir) - # +def create_folders(base_path: str, folders: Dict, current_file) -> None: + """递归创建目录结构""" + for folder_name, content in folders.items(): + # 跳过以下划线开头的元数据键 + if folder_name.startswith('_'): + continue + + # 构建完整路径 + folder_path = os.path.join(base_path, folder_name) + + # 创建目录 + try: + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + # 调试输出 + print(f"处理文件夹: {folder_name}") + print(f"内容类型: {type(content)}") + print(f"内容: {content}") + + except Exception as e: + print(f"创建目录失败 {folder_path}: {str(e)}") + continue + + # 重新从选中的配置文件中读取folder_name中的_icon + with open(current_file, 'r', encoding='utf-8') as f: + data = json.load(f) + icon_path = data['folders'][folder_name]['_icon'] + icon_path = os.path.join(base_path, icon_path) + + # 复制图标到folder_path并创建desktop.ini文件 + try: + filename = os.path.basename(icon_path) + icon_name = os.path.splitext(filename)[0] + '.ico' + temp_icon_path = os.path.join('.\图标', icon_name)#临时图标 + print(temp_icon_path) + img = Image.open(icon_path) + img.save(temp_icon_path, format='ICO') + + shutil.copy(temp_icon_path, folder_path) + os.remove(temp_icon_path) + + final_icon_path = os.path.join(folder_path, icon_name) + desktop_ini_path = os.path.join(folder_path, 'desktop.ini') + + if os.path.exists(desktop_ini_path): + os.remove(desktop_ini_path) + + with open(desktop_ini_path, 'w', encoding='ANSI') as f: + f.write(f"[.ShellClassInfo]\nIconResource=.\{icon_name},0") + + # 设置desktop.ini为系统和隐藏文件 + subprocess.run(['attrib', '+s', '+h', desktop_ini_path], shell=True) + # 设置icon文件为隐藏文件 + subprocess.run(['attrib', '+s', '+h', final_icon_path], shell=True) + # 设置文件夹为只读 + subprocess.run(['attrib', '+r', folder_path], shell=True) + + # 清除图标缓存 + os.system("attrib -h -s -r \"%userprofile%\AppData\Local\IconCache.db\"") + os.system("del /f \"%userprofile%\AppData\Local\IconCache.db\"") + os.system("attrib /s /d -h -s -r \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db\"") + os.system("del /f \"%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db\"") + os.system("echo y|reg delete \"HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\" /v IconStreams") + os.system("echo y|reg delete \"HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\" /v PastIconsStream") + except Exception as e: + print(f"设置图标失败: {str(e)}") + + # 如果有子目录,递归创建 + if isinstance(content, dict): + subfolders = {k: v for k, v in content.items() if not k.startswith('_')} + if subfolders: + create_folders(folder_path, subfolders) + +def main(): + root = tk.Tk() + # 设置窗口图标 + try: + root.iconbitmap("icons/app.ico") + except: + pass + + # 设置窗口主题色 + root.configure(bg="#f0f0f0") + + app = ConfigEditorGUI(root) + root.mainloop() if __name__ == '__main__': - run() \ No newline at end of file + init_icon_dir() + main() \ No newline at end of file diff --git a/main.spec b/main.spec deleted file mode 100644 index 2ba8dd9..0000000 --- a/main.spec +++ /dev/null @@ -1,38 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- - - -a = Analysis( - ['main.py'], - pathex=[], - binaries=[], - datas=[], - hiddenimports=[], - hookspath=[], - hooksconfig={}, - runtime_hooks=[], - excludes=[], - noarchive=False, - optimize=0, -) -pyz = PYZ(a.pure) - -exe = EXE( - pyz, - a.scripts, - a.binaries, - a.datas, - [], - name='main', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - upx_exclude=[], - runtime_tmpdir=None, - console=True, - disable_windowed_traceback=False, - argv_emulation=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None, -) diff --git a/清除图标缓存.bat b/清除图标缓存.bat deleted file mode 100644 index 02da972..0000000 --- a/清除图标缓存.bat +++ /dev/null @@ -1,28 +0,0 @@ -rem 关闭Windows外壳程序explorer - -taskkill /f /im explorer.exe - -rem 清理系统图标缓存数据库 - -attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db" - -del /f "%userprofile%\AppData\Local\IconCache.db" - -attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*" - -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db" -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db" -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db" -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db" -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db" -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db" -del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db" - -rem 清理 系统托盘记忆的图标 - -echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams -echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream - -rem 重启Windows外壳程序explorer - -start explorer \ No newline at end of file