批量文件重命名脚本

代码脚本 · 其他

批量重命名指定目录下的文件,支持添加前缀/后缀、序号、替换字符、修改扩展名,带预览模式。

详细内容

#!/usr/bin/env python3 # 批量文件重命名脚本 # 使用方法: python3 batch_rename.py <目录> [选项] import os import sys import argparse def batch_rename(directory, prefix='', suffix='', start_num=1, replace_from='', replace_to='', extension=None, dry_run=True): """ 批量重命名文件 :param directory: 目标目录 :param prefix: 文件名前缀 :param suffix: 文件名后缀(不含扩展名) :param start_num: 序号起始值 :param replace_from: 要替换的字符串 :param replace_to: 替换为的字符串 :param extension: 统一修改扩展名(如 .txt) :param dry_run: 预览模式,不实际重命名 """ if not os.path.isdir(directory): print(f"错误: 目录不存在 - {directory}") return files = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))] files.sort() print(f"目录: {directory}") print(f"文件数: {len(files)}") print(f"模式: {'预览(不执行)' if dry_run else '执行'}") print("-" * 60) for i, filename in enumerate(files): name, ext = os.path.splitext(filename) # 替换字符 if replace_from: name = name.replace(replace_from, replace_to) # 添加前缀后缀和序号 new_name = f"{prefix}{name}{suffix}_{start_num + i:03d}" # 修改扩展名 if extension: ext = extension if extension.startswith('.') else f'.{extension}' new_filename = f"{new_name}{ext}" old_path = os.path.join(directory, filename) new_path = os.path.join(directory, new_filename) print(f" {filename} → {new_filename}") if not dry_run and old_path != new_path: os.rename(old_path, new_path) print("-" * 60) if dry_run: print("以上为预览,添加 --execute 参数实际执行") else: print("重命名完成!") if __name__ == '__main__': parser = argparse.ArgumentParser(description='批量文件重命名工具') parser.add_argument('directory', help='目标目录') parser.add_argument('--prefix', default='', help='文件名前缀') parser.add_argument('--suffix', default='', help='文件名后缀') parser.add_argument('--start', type=int, default=1, help='序号起始值') parser.add_argument('--replace-from', default='', help='要替换的字符串') parser.add_argument('--replace-to', default='', help='替换为的字符串') parser.add_argument('--ext', default=None, help='统一修改扩展名') parser.add_argument('--execute', action='store_true', help='实际执行(默认预览)') args = parser.parse_args() batch_rename( args.directory, prefix=args.prefix, suffix=args.suffix, start_num=args.start, replace_from=args.replace_from, replace_to=args.replace_to, extension=args.ext, dry_run=not args.execute )
批量重命名文件处理Python效率

更多其他