批量重命名文件-修改指定目录下所有文件的扩展名或前缀

查看 30|回复 3
作者:chuangye   
功能:
文件处理,批量重命名文件,修改指定目录下所有文件的扩展名或前缀
[Python] 纯文本查看 复制代码import os
def batch_rename(folder_path, prefix="document", keep_extension=True, sort_key=None):
    """
    批量重命名指定文件夹中的文件
    参数:
    folder_path (str): 目标文件夹路径
    prefix (str): 新文件名前缀(默认:"document")
    keep_extension (bool): 是否保留原始扩展名(默认:True)
    sort_key (callable): 排序函数(默认:按文件名排序)
    """
    try:
        # 获取文件列表并过滤掉目录
        files = [f for f in os.listdir(folder_path)
                 if os.path.isfile(os.path.join(folder_path, f))]
        # 排序处理
        if sort_key:
            files.sort(key=sort_key)
        else:
            files.sort()  # 默认按文件名排序
        success_count = 0
        skipped_count = 0
        for idx, filename in enumerate(files, start=1):
            old_path = os.path.join(folder_path, filename)
            # 跳过系统文件(如Thumbs.db)
            if filename.startswith('~$'):
                skipped_count += 1
                continue
            # 构造新文件名
            base, ext = os.path.splitext(filename)
            new_name = f"{prefix}_{idx:03d}"
            if keep_extension:
                new_name += ext
            new_path = os.path.join(folder_path, new_name)
            try:
                # 防止文件名重复
                counter = 1
                while os.path.exists(new_path):
                    new_name = f"{prefix}_{idx:03d}_{counter}{ext}"
                    new_path = os.path.join(folder_path, new_name)
                    counter += 1
                os.rename(old_path, new_path)
                print(f"重命名成功: {filename} -> {new_name}")
                success_count += 1
            except Exception as e:
                print(f"错误: 无法重命名 {filename} - {str(e)}")
        print(f"\n操作完成!成功重命名 {success_count} 个文件,跳过 {skipped_count} 个文件")
    except Exception as e:
        print(f"发生错误: {str(e)}")
# 使用示例
if __name__ == "__main__":
    target_folder = "F:\\工作文件\\临时\\demo001"
    # 自定义排序示例(按修改时间排序):
    # from datetime import datetime
    # batch_rename(target_folder, sort_key=lambda x: os.path.getmtime(os.path.join(target_folder, x)))
    batch_rename(
        folder_path=target_folder,
        prefix="report",
        keep_extension=False,  # 设置为False时所有文件将变为.txt
        sort_key=None  # 自定义排序函数可在此处传入
    )

文件, 重命名

一场荒唐半生梦   

楼主有没有打包的
gegegefei   

感谢楼主分享,批量重命名软件好用,很方便。
ghs0925   

感谢楼主分享,这用起来雀氏比手动舒服多了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部