借助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() |