风子是我 发表于 2024-7-2 08:37

批量删除文件夹中所有文件名中指定字符

本帖最后由 风子是我 于 2024-7-2 11:36 编辑

经常在网上下载一些资料,下载的资料在文件名老长老长的,有些还带有网址或者种推广词句,一个一个地删除太麻烦,于时想弄个自动处理的。
下面是代码:

import os
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

folder_path = ""

def select_folder():
    global folder_path
    folder_path = filedialog.askdirectory()
    folder_label.config(text=folder_path)
    return folder_path

def input_chars():
    chars_to_delete = delete_entry.get()
    if chars_to_delete:
      root.after(100, rename_files, chars_to_delete)
    else:
      messagebox.showwarning("警告", "请输入要删除的字符!")

def rename_files(chars_to_delete):
    global folder_path
    if folder_path:
      for root, dirs, files in os.walk(folder_path):
            for file in files:
                if chars_to_delete in file:
                  # 构建新的文件名
                  new_filename = file.replace(chars_to_delete, '')
                  # 获取旧文件名和新的文件名的完整路径
                  old_file_path = os.path.join(root, file)
                  new_file_path = os.path.join(root, new_filename)
                  # 重命名文件
                  os.rename(old_file_path, new_file_path)
      messagebox.showinfo("完成", "所有文件名中包含指定字符的文件都已重命名。")
    else:
      messagebox.showwarning("警告", "请选择文件夹!")

root = tk.Tk()
root.title("批量重命名文件名中字符")

folder_label = tk.Label(root, text="请选择文件夹:")
folder_label.pack()

folder_button = tk.Button(root, text="选择文件夹", command=select_folder)
folder_button.pack()

delete_label = tk.Label(root, text="请输入要删除的字符:")
delete_label.pack()

delete_entry = tk.Entry(root)
delete_entry.pack()

input_button = tk.Button(root, text="重命名", command=input_chars)
input_button.pack()

root.mainloop()


相同的字符可以处理了,如果是下面方框中的,没规律的数字,但是又不相同,怎么办?
下面是另一段代码:
import tkinter as tk
from tkinter import filedialog
import os
import re

def select_folder():
    folder_path = filedialog.askdirectory()
    entry_folder.delete(0, tk.END)
    entry_folder.insert(0, folder_path)

def search_and_remove():
    folder_path = entry_folder.get()
    if not os.path.exists(folder_path):
      tk.messagebox.showerror("错误", "文件夹不存在")
      return

    files = os.listdir(folder_path)
    for file in files:
      if re.search(r'\[[^]]*\]', file):
            # 构建新的文件名
            new_filename = re.sub(r'\[.*?\]', '', file)
            # 重命名文件
            os.rename(os.path.join(folder_path, file), os.path.join(folder_path, new_filename))
            print(f"已成功处理文件: {file} -> {new_filename}")

root = tk.Tk()
root.title("搜索并删除含有[]的文件名")

label_folder = tk.Label(root, text="请选择文件夹:")
label_folder.pack()

entry_folder = tk.Entry(root)
entry_folder.pack()

button_folder = tk.Button(root, text="选择文件夹", command=select_folder)
button_folder.pack()

button_search = tk.Button(root, text="搜索并删除", command=search_and_remove)
button_search.pack()
root.mainloop()


程序运行界面:


打包后的可执行程序:
链接:https://pan.baidu.com/s/1CX51trcOIAJj87WCKCEpew
提取码:52pj

有个坛友@@SU150228 讲的很有道理,有矛就有盾,功能上应该有文件名中增加的功能,现在修改了下,可以增加,也可以删除,代码如下,修改后的下载链接在最后面:

import os
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

folder_path = ""
chars_to_delete = ""# 要删除的字符
chars_to_add = ""# 要添加的字符

def select_folder():
    global folder_path
    folder_path = filedialog.askdirectory()
    folder_label.config(text=folder_path)

def input_chars_to_delete():
    global chars_to_delete
    chars_to_delete = delete_entry.get()
    if chars_to_delete:
      rename_files(chars_to_delete)
    else:
      messagebox.showwarning("警告", "请输入要删除的字符!")

def input_chars_to_add():
    global chars_to_add
    chars_to_add = add_entry.get()
    if chars_to_add:
      rename_files(chars_to_add, add=True)
    else:
      messagebox.showwarning("警告", "请输入要添加的字符!")

def rename_files(chars_to_add, add=False):
    global folder_path
    if folder_path:
      for root, dirs, files in os.walk(folder_path):
            for file in files:
                if add:
                  new_filename = chars_to_add + file
                else:
                  new_filename = file.replace(chars_to_add, '')
               
                # 获取旧文件名和新的文件名的完整路径
                old_file_path = os.path.join(root, file)
                new_file_path = os.path.join(root, new_filename)
               
                # 重命名文件
                try:
                  os.rename(old_file_path, new_file_path)
                except FileNotFoundError:# 如果文件被其他程序打开或移动,可能会引发错误
                  pass
      messagebox.showinfo("完成", "所有文件名中包含指定字符的文件都已处理。")
    else:
      messagebox.showwarning("警告", "请选择文件夹!")

root = tk.Tk()
root.title("批量重命名文件名中字符")

folder_label = tk.Label(root, text="请选择文件夹:")
folder_label.pack()

folder_button = tk.Button(root, text="选择文件夹", command=select_folder)
folder_button.pack()

delete_label = tk.Label(root, text="请输入要删除的字符:")
delete_label.pack()

delete_entry = tk.Entry(root)
delete_entry.pack()

delete_button = tk.Button(root, text="删除字符", command=input_chars_to_delete)
delete_button.pack()

add_label = tk.Label(root, text="请输入要添加的字符:")
add_label.pack()

add_entry = tk.Entry(root)
add_entry.pack()

add_button = tk.Button(root, text="添加字符", command=input_chars_to_add)
add_button.pack()

root.mainloop()



应坛友要求,修改后的打包后的程序下载:
链接:https://pan.baidu.com/s/14gF-ar1L12g2UTMal9cNaw
提取码:52pj

6122008 发表于 2024-7-2 08:53

这不就是重命名工具就可以实现的么?

风子是我 发表于 2024-7-2 11:40

有个坛友@@SU150228 讲的很有道理,有矛就有盾,功能上应该有文件名中增加的功能,现在修改了下,可以增加,也可以删除,代码如下,修改后的下载链接:
链接:https://pan.baidu.com/s/14gF-ar1L12g2UTMal9cNaw
提取码:52pj

jackting 发表于 2024-7-2 08:44

很有用啊,连载小说批量改名{:1_893:}

pc2k007 发表于 2024-7-2 08:51

不错,支持原创!

ianlcc 发表于 2024-7-2 08:51

谢谢楼主的分享
这个非常的实用,谢谢

风子是我 发表于 2024-7-2 08:59

6122008 发表于 2024-7-2 08:53
这不就是重命名工具就可以实现的么?

重命名是把原来的文件名全改了,比如,我截图上面下载的课件和教案,用重命名软件不行。
因为原来的课程名称不能变,我只想把多余的删除。

e_fei_lk 发表于 2024-7-2 09:02

这 个好,适合从网上下载的视频或音频改名

NoWshun 发表于 2024-7-2 09:05

小功能,大实用

cxgdrbtxgz 发表于 2024-7-2 09:10

实用,感谢楼主

feigs0710 发表于 2024-7-2 09:14

这个可以一试,感谢分享
页: [1] 2 3 4
查看完整版本: 批量删除文件夹中所有文件名中指定字符