增加批量重命名文件的功能 1可以批量增加前缀 2可以批量增加后缀 3可以替换原名字中部分关键字 4可以替换文件的格式名如将.docx替换为.doc 5提供完整代码
时间: 2025-04-03 08:02:45 浏览: 22
为了在现有程序中添加批量重命名文件功能,我们可以扩展`create_ui()`函数和新增一个处理文件重命名逻辑的函数。以下是修改后的完整代码:
```python
import win32com.client as win32
import os
from tkinter import Tk, filedialog, messagebox, Label, Entry, Button, Checkbutton, IntVar, Radiobutton, StringVar
def replace_in_documents(folder_path, original_text, replacement_text, use_wildcards):
# ... (保持原有replace_in_documents函数不变)
def rename_files(folder_path, operation, prefix="", suffix="", keyword="", new_keyword="", old_extension=".docx", new_extension=".doc"):
renamed_files = []
failed_files = []
try:
for filename in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, filename)):
try:
new_name = filename
# Perform the selected operations
if operation == 'prefix':
new_name = f"{prefix}{new_name}"
elif operation == 'suffix':
new_name = f"{os.path.splitext(new_name)[0]}{suffix}{os.path.splitext(new_name)[1]}"
elif operation == 'keyword':
new_name = new_name.replace(keyword, new_keyword)
elif operation == 'extension':
base, ext = os.path.splitext(new_name)
if ext.lower() == old_extension.lower():
new_name = base + new_extension
new_fullpath = os.path.join(folder_path, new_name)
# Ensure no name collision occurs
counter = 1
while os.path.exists(new_fullpath):
name_without_ext, extension = os.path.splitext(new_name)
new_fullpath = os.path.join(
folder_path, f"{name_without_ext}_{counter}{extension}")
counter += 1
os.rename(os.path.join(folder_path, filename), new_fullpath)
renamed_files.append(
(filename, os.path.basename(new_fullpath)))
except Exception as e:
failed_files.append((filename, str(e)))
message = f"成功重命名{len(renamed_files)}个文件\n失败:{len(failed_files)}"
for fail in failed_files:
message += f"\n文件名:{fail[0]}, 错误信息:{fail[1]}"
messagebox.showinfo("结果", message)
except Exception as e:
messagebox.showerror("错误", str(e))
def create_ui():
root = Tk()
root.title("批量处理工具")
# 文件夹选择部分(保留原有的)
# ... (此处省略原有文件夹选择部分)
# 新增的批量重命名UI元素
label_rename_operation = Label(root, text="选择操作:")
label_rename_operation.grid(row=6, column=0, padx=5, pady=5)
operation_var = StringVar(value='prefix') # 默认值
Radiobutton(root, text="增加前缀", variable=operation_var,
value='prefix').grid(row=7, column=0, sticky='w', padx=5, pady=5)
Radiobutton(root, text="增加后缀", variable=operation_var,
value='suffix').grid(row=8, column=0, sticky='w', padx=5, pady=5)
Radiobutton(root, text="替换关键字", variable=operation_var,
value='keyword').grid(row=9, column=0, sticky='w', padx=5, pady=5)
Radiobutton(root, text="更改文件扩展名", variable=operation_var,
value='extension').grid(row=10, column=0, sticky='w', padx=5, pady=5)
label_prefix_suffix = Label(root, text="前缀/后缀文本:")
label_prefix_suffix.grid(row=7, column=1, padx=5, pady=5, sticky='e')
entry_prefix_suffix = Entry(root, width=40)
entry_prefix_suffix.grid(row=7, column=2, padx=5, pady=5)
label_keyword_old = Label(root, text="旧关键字:")
label_keyword_old.grid(row=8, column=1, padx=5, pady=5, sticky='e')
entry_keyword_old = Entry(root, width=40)
entry_keyword_old.grid(row=8, column=2, padx=5, pady=5)
label_keyword_new = Label(root, text="新关键字:")
label_keyword_new.grid(row=9, column=1, padx=5, pady=5, sticky='e')
entry_keyword_new = Entry(root, width=40)
entry_keyword_new.grid(row=9, column=2, padx=5, pady=5)
label_extension_old = Label(root, text="旧扩展名:")
label_extension_old.grid(row=10, column=1, padx=5, pady=5, sticky='e')
entry_extension_old = Entry(root, width=40)
entry_extension_old.insert(0, ".docx") # 设置默认值
entry_extension_old.grid(row=10, column=2, padx=5, pady=5)
label_extension_new = Label(root, text="新扩展名:")
label_extension_new.grid(row=11, column=1, padx=5, pady=5, sticky='e')
entry_extension_new = Entry(root, width=40)
entry_extension_new.insert(0, ".doc") # 设置默认值
entry_extension_new.grid(row=11, column=2, padx=5, pady=5)
def on_rename_click():
op = operation_var.get()
if op == 'prefix' or op == 'suffix':
text = entry_prefix_suffix.get()
elif op == 'keyword':
keyword = entry_keyword_old.get()
new_keyword = entry_keyword_new.get()
if not keyword:
messagebox.showwarning("警告", "请输入要替换的关键字!")
return
elif op == 'extension':
old_extension = entry_extension_old.get()
new_extension = entry_extension_new.get()
if not old_extension.startswith("."):
old_extension = "." + old_extension
if not new_extension.startswith("."):
new_extension = "." + new_extension
else:
messagebox.showwarning("警告", "无效的操作选项!")
return
if not folder_selected:
messagebox.showwarning("警告", "请选择文件夹!")
return
if op == 'prefix' or op == 'suffix':
rename_files(folder_selected, op, prefix=text if op ==
'prefix' else "", suffix=text if op == 'suffix' else "")
elif op == 'keyword':
rename_files(folder_selected, op, keyword=keyword,
new_keyword=new_keyword)
elif op == 'extension':
rename_files(folder_selected, op, old_extension=old_extension,
new_extension=new_extension)
# 新增“开始重命名”按钮
button_rename = Button(root, text="开始重命名",
command=on_rename_click)
button_rename.grid(row=12, columnspan=3, pady=10)
root.mainloop()
if __name__ == "__main__":
create_ui()
```
此代码实现了以下功能:
- 用户可以选择执行四种不同的重命名操作之一。
- 对于每种操作,提供了相应的输入框让用户指定具体参数。
- 在点击“开始重命名”按钮时调用`rename_files()`方法,并传递适当的参数以完成所选类型的重命名任务。
阅读全文
相关推荐

















