为了实现批量重命名指定文件夹内的文件功能(包括替换文件名中的前缀、后缀或指定内容),可以在现有代码基础上添加一个新的函数`rename_files_in_folder()`和相应的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):
# ... (保持不变)
def rename_files_in_folder(folder_path, target_part, new_part, part_type):
"""对文件夹中的所有文件执行批量重命名"""
renamed_count = 0
error_files = []
for filename in os.listdir(folder_path):
old_file_path = os.path.join(folder_path, filename)
if os.path.isfile(old_file_path): # 只处理文件而不是子目录
try:
name, ext = os.path.splitext(filename)
if part_type == 'prefix':
if name.startswith(target_part):
new_name = new_part + name[len(target_part):]
else:
continue
elif part_type == 'suffix':
if name.endswith(target_part):
new_name = name[:-len(target_part)] + new_part
else:
continue
else: # 'content'
new_name = name.replace(target_part, new_part)
new_filename = new_name + ext
new_file_path = os.path.join(folder_path, new_filename)
if new_file_path != old_file_path:
os.rename(old_file_path, new_file_path)
renamed_count += 1
except Exception as e:
error_files.append((filename, str(e)))
msg = f'成功重命名了{renamed_count}个文件。\n'
if error_files:
errors_info = '\n'.join([f'{f}: {e}' for f, e in error_files])
msg += f'\n以下文件未能成功重命名:\n{errors_info}'
messagebox.showinfo("批量重命名结果", msg)
def create_ui():
folder_selected = None
operation_type = StringVar(value='replace_doc') # 默认值是替换文档内容
def browse_folder():
nonlocal folder_selected
folder_selected = filedialog.askdirectory(title="选择包含Word文档或其他文件的文件夹")
if folder_selected:
label_folder.config(text=f"已选择文件夹:{folder_selected}")
def on_replace_click():
if not folder_selected or operation_type.get() == 'replace_doc':
original_text = entry_original.get()
replacement_text = entry_replacement.get() if entry_replacement.get() else ""
if not original_text:
messagebox.showwarning("警告", "请输入要查找的内容!")
return
replace_in_documents(folder_selected, original_text, replacement_text, var_use_wildcards.get())
def on_rename_click():
if not folder_selected or operation_type.get() == 'rename_files':
target_part = entry_target_part.get()
new_part = entry_new_part.get()
part_type = radio_selection.get()
if not target_part:
messagebox.showwarning("警告", "请输入目标部分!")
return
rename_files_in_folder(folder_selected, target_part, new_part, part_type)
root = Tk()
root.title("批量处理工具")
# 文件夹选择部分
button_browse = Button(root, text="选择文件夹", command=browse_folder)
button_browse.grid(row=0, columnspan=2, pady=10)
label_folder = Label(root, text="未选择文件夹")
label_folder.grid(row=1, columnspan=2, pady=5)
# 操作选择部分
radiobutton_replace_doc = Radiobutton(
root, text="批量替换Word文档内容", variable=operation_type, value='replace_doc')
radiobutton_rename_files = Radiobutton(
root, text="批量重命名文件", variable=operation_type, value='rename_files')
radiobutton_replace_doc.grid(row=2, columnspan=2, sticky='w', pady=(10, 0))
radiobutton_rename_files.grid(row=3, columnspan=2, sticky='w')
# 批量替换Word文档内容的UI元素
label_original = Label(root, text="原内容:")
label_original.grid(row=4, column=0, padx=5, pady=5)
entry_original = Entry(root, width=40)
entry_original.grid(row=4, column=1, padx=5, pady=5)
label_replacement = Label(root, text="替换为:")
label_replacement.grid(row=5, column=0, padx=5, pady=5)
entry_replacement = Entry(root, width=40)
entry_replacement.grid(row=5, column=1, padx=5, pady=5)
var_use_wildcards = IntVar()
checkbutton_wildcards = Checkbutton(
root, text="启用通配符(*)", variable=var_use_wildcards)
checkbutton_wildcards.grid(row=6, columnspan=2, pady=5)
# 批量重命名文件的UI元素
label_target_part = Label(root, text="目标部分:")
label_target_part.grid(row=7, column=0, padx=5, pady=5)
entry_target_part = Entry(root, width=40)
entry_target_part.grid(row=7, column=1, padx=5, pady=5)
label_new_part = Label(root, text="新部分:")
label_new_part.grid(row=8, column=0, padx=5, pady=5)
entry_new_part = Entry(root, width=40)
entry_new_part.grid(row=8, column=1, padx=5, pady=5)
radio_selection = StringVar(value='content') # 默认值是替换指定内容
radiobutton_prefix = Radiobutton(
root, text="前缀", variable=radio_selection, value='prefix')
radiobutton_suffix = Radiobutton(
root, text="后缀", variable=radio_selection, value='suffix')
radiobutton_content = Radiobutton(
root, text="指定内容", variable=radio_selection, value='content')
radiobutton_prefix.grid(row=9, column=0, sticky='w', padx=5, pady=5)
radiobutton_suffix.grid(row=9, column=1, sticky='w', padx=5, pady=5)
radiobutton_content.grid(row=10, columnspan=2, sticky='w', padx=5, pady=5)
# 开始按钮
button_replace = Button(root, text="开始", command=lambda: {
on_replace_click() if operation_type.get() == 'replace_doc' else on_rename_click()})
button_replace.grid(row=11, columnspan=2, pady=10)
root.mainloop()
if __name__ == "__main__":
create_ui()
```
在这个版本中,我们增加了两个新的单选按钮让用户选择是要进行“批量替换Word文档内容”还是“批量重命名文件”。当用户选择了后者时,他们可以选择是否修改文件名的前缀、后缀或是特定位置的内容,并通过输入框提供旧的部分和新的部分。点击“开始”按钮将根据当前的选择调用对应的函数完成任务。此外,程序会显示一条消息告知用户操作的结果。