运行出来是酱紫
1.双击运行
2.点击选择路径按钮,选择希望查询版本的路径
3.会在程序的相同目录下生成一个包含文件名和版本信息的file_version.xlxs文件
4.分为EXE和DLL两个sheet表
import time
import tkinter as tk
from tkinter import filedialog
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
import win32api
import os
def get_file_version(file_path):
try:
info = win32api.GetFileVersionInfo(file_path, '\\')
ms = info['FileVersionMS']
ls = info['FileVersionLS']
file_version = f"{win32api.HIWORD(ms)}.{win32api.LOWORD(ms)}.{win32api.HIWORD(ls)}.{win32api.LOWORD(ls)}"
return file_version
except Exception as e:
text.insert(tk.END, f"Failed to get version for file: {file_path}"+"\n")
return ""
def write_to_excel(file_info, excel_file):
workbook = openpyxl.Workbook()
workbook.remove(workbook.active) # 删除默认的 Sheet 表
for sheet_name, file_list in file_info.items():
sheet = workbook.create_sheet(sheet_name)
header = ["File Name", "Version"]
for col_num, column_title in enumerate(header, 1):
col_letter = get_column_letter(col_num)
cell = sheet.cell(row=1, column=col_num)
cell.value = column_title
cell.font = Font(bold=True)
sheet.column_dimensions[col_letter].width = 20
for row_num, (file_name, version) in enumerate(file_list, 2):
sheet.cell(row=row_num, column=1, value=file_name)
sheet.cell(row=row_num, column=2, value=version)
workbook.save(excel_file)
def button_clicked():
file_path = "./file_versions.xlsx" # 指定要删除的文件路径
try:
# 尝试以管理员身份运行脚本
os.remove(file_path)
text.insert(tk.END, "历史文件删除成功" + "\n")
except PermissionError:
# 如果没有删除权限,尝试修改文件权限
os.chmod(file_path, 0o777)
os.remove(file_path)
text.insert(tk.END, "历史文件删除成功" + "\n")
except FileNotFoundError:
text.insert(tk.END, "历史文件不存在" + "\n")
except Exception as e:
print("发生未知错误:", str(e))
# 弹出文件选择对话框
common_path = filedialog.askdirectory()
# 更新文本框中的内容
entry.delete(0, tk.END)
entry.insert(tk.END, common_path)
file_info = {
"EXE Files": [],
"DLL Files": []
}
for root, dirs, files in os.walk(common_path):
for file in files:
file_path = os.path.join(root, file)
if file.endswith(".exe"):
version = get_file_version(file_path)
file_info["EXE Files"].append((file, version))
elif file.endswith(".dll"):
version = get_file_version(file_path)
file_info["DLL Files"].append((file, version))
excel_file = "file_versions.xlsx"
write_to_excel(file_info, excel_file)
text.insert(tk.END,f"File versions have been written to {excel_file}"+"\n")
text.see(tk.END)
time.sleep(10)
# 创建主窗口
window = tk.Tk()
window.geometry("800x600+200+200")
window.title("strings")
label = tk.Label(window,text = "请选择你希望查询版本的路径 : ")
# 创建输入框
entry = tk.Entry(window,width=40)
entry.pack()
# 创建按钮
button = tk.Button(window, text="选择路径", command=button_clicked)
button.pack()
# 创建文本框
text = tk.Text(window)
text.pack()
# 每次更新调试信息后,通过调用 after() 方法设置下一次更新的时间间隔
text.after(100)
# 使用布局管理器将它们水平放置
label.pack(side=tk.LEFT)
button.pack(side=tk.LEFT)
entry.pack(side=tk.LEFT)
# 进入消息循环
window.mainloop()