当前位置: 首页 > 图灵资讯 > 行业资讯> 如何批量复制并顺序重命名文件夹与文件

如何批量复制并顺序重命名文件夹与文件

来源:图灵python
时间: 2026-08-26 16:09:32

本文介绍了使用python脚本批量复制模板目录结构,并根据指定数量自动生成增加编号(如 shot_010、shot_020)文件夹和文件支持副本数、路径映射和安全重命名的灵活配置。

本文介绍了使用python脚本批量复制模板目录结构,并根据指定数量自动生成增加编号(如 shot_010、shot_020)文件夹和文件支持副本数、路径映射和安全重命名的灵活配置。

在影视制作、VFX流程或工程项目管理中,通常需要基于标准模板(如 shot_010)快速生成多个带序号的副本(如 shot_020shot_030…),每个副本应保持完整的子目录结构和内部文件的同步重命名。手动操作容易出错,效率低下,借助 Python 可实现完全自动化、可复用、可扩展的批量处理。

以下是生产就绪的强大解决方案。核心逻辑分为三个步骤:生成序列名 → 创建目标目录 → 复制并重命名文件。我们 RootFolder/shot_010/folder/shot_010_comp_v01.comp 生成模板 n 一份递增编号副本:

import os
import shutil

def get_dir_name(count: int):
    """生成 shot_010, shot_020, ..., shot_N0 格式文件夹名(N 从 1 开始)"""
    for i in range(1, count + 1):
        yield f"shot_{i:02}0"

def get_file_name(count: int):
    """例如,生成相应的文件名 shot_010_comp_v01.comp → shot_020_comp_v01.comp"""
    for i in range(1, count + 1):
        yield f"shot_{i:02}0_comp_v01.comp"

def duplicate_shot_folder(
    src_root: str = "shot_010",
    dest_root: str = ".",
    count: int = 5,
    template_file_path: str = "shot_010/folder/shot_010_comp_v01.comp"
):
    """
    批量复制模板文件夹,并按顺序重新命名

    :param src_root: 源模板文件夹名(不含父路径)
    :param dest_root: 目标根目录(默认当前目录)
    :param count: 生成的副本数量
    :param template_file_path: 与项目根相比,模板文件的路径(用于定位源文件)
    """
    # 确保源文件的存在
    if not os.path.isfile(template_file_path):
        raise FileNotFoundError(f"不存在模板文件:{template_file_path}")

    # 每一份副本都是通过遍历生成的
    for dir_name, file_name in zip(get_dir_name(count), get_file_name(count)):
        target_dir = os.path.join(dest_root, dir_name, "folder")
        target_file = os.path.join(target_dir, file_name)

        # 创建目标目录(含嵌套)
        os.makedirs(target_dir, exist_ok=True)

        # 复制文件(非硬链接,保证独立性)
        shutil.copyfile(template_file_path, target_file)
        print(f"✓ 已创建:{target_file}")

# ✅ 使用示例:生成 3 个副本(shot_010 → shot_030)
duplicate_shot_folder(count=3)

关键说明及注意事项:

  • ✅ 安全路径:使用 os.path.join() 构建跨平台兼容路径;exist_ok=True 避免重复创建目录报错;
  • ✅ 命名可控:{i:02}0 实现两位数字前导零(例如 1→010, 12→120),如果需要三位可以改为 {i:03}0
  • ⚠️ RootFolder 管理:脚本默认在当前目录下生成 shot_XXX,若需统一放置 RootFolder/ 下,请将 dest_root 设为 "RootFolder",并确保该目录已存在或提前创建;
  • ?️ 扩展建议:
    • 支持多级子目录复制?改用 shutil.copytree() + 后续重命名,或遍历 os.walk() 逐项处理;
    • 支持通配符替换(如自动更新) .comp 内部路径)?需要结合文本分析(如正则或正则) AST);
    • 增加 dry-run 模式?添加 --dry-run 仅打印操作而不执行参数;
    • 调用集成命令行?搭配 argparse 一键操作即可:python duplicate.py --count 10 --root RootFolder

该方案重量轻,无外部依赖,开箱即用,不仅满足基本批量复制的需要,而且具有明确的扩展接口,是标准化项目初始化的理想工具。