python脚本:批量修改文件名

Published on 2025-03-02 19:07 in 分类: 随笔 with 狂盗一枝梅
分类: 随笔

该脚本用于Windows系统下批量重命名文件,可以将文件名中的某些字符串删除或者替换为指定字符串。

输入:

  • 目标文件夹:目标文件夹的绝对路径,将会从该文件夹递归查询目标文件
  • 目标文件后缀:查询的文件后缀,比如mp4
  • 待替换字符串:支持正则表达式,注意转义字符,比如:\[.*\]
  • 替换成的字符串:如果为空将会删除待替换的字符串
import re
from pathlib import Path

"""
该脚本用于Windows系统下批量重命名文件,可以将文件名中的某些字符串删除或者替换为指定字符串。

输入:

目标文件夹:目标文件夹的绝对路径,将会从该文件夹递归查询目标文件
目标文件后缀:查询的文件后缀,比如mp4
待替换字符串:支持正则表达式,注意转义字符,比如:\\[.*\\]
替换成的字符串:如果为空将会删除待替换的字符串
"""


def batch_rename_files():
    dir_name = input("请输入目标文件夹:")
    suffix = input("请输入目标文件后缀:")
    replace_str = input("请输入待替换字符串(支持正则表达式):")
    replaced_str = input("请输入替换成的字符串:(为空表示删除,选填):")
    pattern = re.compile("^.*(" + replace_str + ").*$")

    if not Path(dir_name).exists():
        raise RuntimeError(f"目标文件不存在:{dir_name}")
    if not Path(dir_name).is_dir():
        raise RuntimeError(f"目标不是文件夹类型:{dir_name}")
    p = Path(dir_name)
    all_files = [i for i in p.glob(f"**/*.{suffix}") if not i.is_dir()]
    for file in all_files:
        file_name = file.name
        if not pattern.match(file_name):
            continue
        result = re.sub(replace_str, lambda x: replaced_str, file_name)
        final_path = file.parent.joinpath(result)
        if final_path == file:
            print(f"skip rename {file} to {final_path} ")
            continue
        print(f"正在重命名 {file} 为 {final_path} ")
        if final_path.exists():
            final_path.unlink()
        file.rename(final_path)
    print("结束执行任务")
    input("输入任意字符继续......")


if __name__ == '__main__':
    while True:
        batch_rename_files()

注意:重命名后的文件如果存在,会先删除旧文件


#python
复制 复制成功