吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2512|回复: 10
收起左侧

[Windows] 拖动文件创建副本【AI辅助小软件】

[复制链接]
kaguyaai 发表于 2025-5-14 14:37
借助AI辅助写了一个小软件,功能是将文件拖动到此程序上,自动为此程序创建一个.bak+当前日期的副本,使用右键管理员运行后,可以将此程序添加到右键菜单
不得不说,最近的ai真的很好用。
如何使用:

1、程序放在需要创建多个副本路径下,将需要备份的文件拖动到程序图标上,程序会自动创建一个副本,名字为原始文件名+.bak+-当前时间节点

2、将程序放在一个不会随便删除的路径下,右键此程序,选择以管理员权限运行,在弹出的菜单中可以选择注册到右键,移除右键菜单。注册后,右键需要 备份的文件,在顶部的菜单中会有“对此文件创建副本.bak[当前日期]”的菜单项,点击后自动创建一个副本。





下载地址:

https://wwor.lanzouw.com/ifgG52w72i9g密码:52pj


https://wwor.lanzouw.com/ifgG52w72i9g

密码:52pj



源码
[Python] 纯文本查看 复制代码
import os
import sys
import shutil
import winreg
import ctypes
from datetime import datetime
import tkinter as tk
from tkinter import messagebox

def is_admin():
    """检查是否以管理员权限运行"""
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def create_backup(file_path):
    """创建文件备份"""
    try:
        if not os.path.isfile(file_path):
            messagebox.showerror("错误", f"文件 '{file_path}' 不存在")
            return False
            
        current_time = datetime.now().strftime("%Y%m%d%H%M")
        backup_path = f"{file_path}.bak-{current_time}"
        shutil.copy2(file_path, backup_path)
        
        messagebox.showinfo("成功", f"已创建备份: {os.path.basename(backup_path)}")
        return True
        
    except Exception as e:
        messagebox.showerror("错误", f"创建备份时出错: {str(e)}")
        return False

def add_to_right_click_menu():
    """添加到右键菜单"""
    try:
        if not is_admin():
            messagebox.showerror("错误", "需要管理员权限才能修改右键菜单")
            return False

        exe_path = os.path.abspath(sys.argv[0])
        
        # 创建主键
        with winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, r"*\shell\FileBackup") as key:
            winreg.SetValue(key, "", winreg.REG_SZ, "对此文件创建副本.bak[当前日期]")
            winreg.SetValueEx(key, "Icon", 0, winreg.REG_SZ, exe_path)
            
            # 创建命令子键
            with winreg.CreateKey(key, "command") as cmd_key:
                winreg.SetValue(cmd_key, "", winreg.REG_SZ, f'"{exe_path}" "%1"')
        
        messagebox.showinfo("成功", "已成功添加到右键菜单")
        return True
        
    except Exception as e:
        messagebox.showerror("错误", f"添加右键菜单失败: {str(e)}")
        return False

def remove_from_right_click_menu():
    """从右键菜单移除"""
    try:
        if not is_admin():
            messagebox.showerror("错误", "需要管理员权限才能修改右键菜单")
            return False

        # 递归删除注册表项
        def delete_subkeys(key):
            for i in range(winreg.QueryInfoKey(key)[0]):
                subkey_name = winreg.EnumKey(key, 0)
                with winreg.OpenKey(key, subkey_name, 0, winreg.KEY_ALL_ACCESS) as subkey:
                    delete_subkeys(subkey)
                winreg.DeleteKey(key, subkey_name)
        
        try:
            with winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"*\shell\FileBackup", 0, winreg.KEY_ALL_ACCESS) as key:
                delete_subkeys(key)
            winreg.DeleteKey(winreg.HKEY_CLASSES_ROOT, r"*\shell\FileBackup")
        except WindowsError as e:
            if e.winerror == 2:  # 键不存在
                messagebox.showinfo("提示", "右键菜单项不存在")
                return True
            raise
        
        messagebox.showinfo("成功", "已从右键菜单移除")
        return True
        
    except Exception as e:
        messagebox.showerror("错误", f"移除右键菜单失败: {str(e)}")
        return False


def main():
    # 如果是通过右键菜单调用(有文件参数传入)
    if len(sys.argv) > 1:
        for file_path in sys.argv[1:]:
            create_backup(file_path)
        return

    choice = messagebox.askyesnocancel("文件备份工具(请右键使用管理员权限运行)", 
                                     "请选择操作:\n\n是 - 添加到右键菜单(注册后,文件不可改名和修改路径)\n否 - 从右键菜单移除\n取消 - 退出")
    
    if choice is True:
        add_to_right_click_menu()
    elif choice is False:
        remove_from_right_click_menu()

if __name__ == "__main__":
    # 解决Windows DPI缩放问题
    
    if os.name == 'nt':
        from ctypes import windll
        windll.shcore.SetProcessDpiAwareness(1)
    
    main()

程序图标

程序图标

程序添加

程序添加

程序菜单

程序菜单

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
dogox + 1 + 1 我很赞同!
way824325223 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Franze2020 发表于 2025-5-15 11:16
直接Ctrl+会不会更快?
 楼主| kaguyaai 发表于 2025-5-15 10:01
tsyhome 发表于 2025-5-14 23:50
似乎用批处理脚本也能实现类似的功能!

是的,批处理也能做到,主要是我自己的需求是需要对一些文件备份后,确保文件有个可靠的备份且不会被软件再次识别为可识别的格式。
jxsdxxf 发表于 2025-5-14 15:02
会不会拖慢系统运行速度??如果删除程序会不会无法删除右键菜单??
baobao107 发表于 2025-5-14 15:03
ctrl+拖动文件效果是不是差不多?
netdna518 发表于 2025-5-14 15:15
试了一下,只对exe文件起作用
ysjd22 发表于 2025-5-14 16:12
感觉有用,又觉得好像没什么用啊
ybwei2008 发表于 2025-5-14 16:34
[Windows] 拖动文件创建副本
dysunb 发表于 2025-5-14 19:15
名字为原始文件名+.bak+-当前时间节点
tsyhome 发表于 2025-5-14 23:50
似乎用批处理脚本也能实现类似的功能!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-17 09:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表