1. 批量重命名文件

批量重命名文件 学习卡片

任务说明

本案例需要编写一个Python脚本,遍历指定文件夹中的所有文件,并按照规则批量重命名。规则为:在原始文件名前添加当天日期(格式YYYYMMDD)作为前缀,若文件名已包含该日期前缀则跳过,避免重复处理。脚本需支持通过命令行参数指定目标文件夹路径。

核心实现

import os
import sys
from datetime import datetime

def batch_rename(folder_path):
    """
    遍历folder_path下的所有文件(不含子目录),
    为每个文件添加YYYYMMDD_前缀;若已存在该前缀则跳过。
    """
    if not os.path.isdir(folder_path):
        print(f"错误:路径不存在或不是文件夹 - {folder_path}")
        return

    date_prefix = datetime.now().strftime("%Y%m%d")
    renamed_count = 0
    skipped_count = 0

    for filename in os.listdir(folder_path):
        full_path = os.path.join(folder_path, filename)

        # 仅处理文件,跳过子目录
        if not os.path.isfile(full_path):
            continue

        # 已包含日期前缀则跳过
        if filename.startswith(date_prefix + "_"):
            skipped_count += 1
            continue

        new_filename = f"{date_prefix}_{filename}"
        new_full_path = os.path.join(folder_path, new_filename)

        # 若目标文件名已存在(如同一天重复运行),则跳过
        if os.path.exists(new_full_path):
            skipped_count += 1
            continue

        os.rename(full_path, new_full_path)
        renamed_count += 1
        print(f"已重命名: {filename} -> {new_filename}")

    print(f"完成:重命名 {renamed_count} 个文件,跳过 {skipped_count} 个文件。")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python rename_files.py <目标文件夹路径>")
        sys.exit(1)
    batch_rename(sys.argv[1])

落地与运行方式

将上述代码保存为 rename_files.py。在命令行中执行:

python rename_files.py /path/to/your/folder

脚本会立即处理该文件夹下的所有普通文件(不递归子目录)。运行前建议先备份文件或在测试文件夹中试用。

验证方法与判定标准

验证步骤:

  1. 创建一个测试文件夹,放入若干文件,例如 report.txt、data.csv、notes.md。
  2. 运行脚本并传入该文件夹路径。
  3. 观察命令行输出,应显示每个文件被重命名的记录。
  4. 使用文件管理器或 ls 命令检查文件夹内容。

判定标准:

  • 所有文件均被重命名为 YYYYMMDD_原文件名 格式,其中 YYYYMMDD 为运行当天的日期。
  • 再次运行同一脚本,输出应显示“跳过 N 个文件”,且文件名不会重复添加前缀。
  • 若文件夹中存在子目录,子目录本身及其内部文件不会被修改。
批量重命名脚本执行流程 命令行参数 文件夹路径 os.listdir 遍历 跳过子目录 已含日期前缀? 跳过 否 os.rename 重命名 添加 YYYYMMDD_ 前缀 打印重命名结果 统计成功/跳过数量 判定逻辑说明 文件名以“YYYYMMDD_”开头 → 跳过,避免重复处理 目标文件名已存在(同一天重复运行)→ 跳过 子目录不处理,仅重命名普通文件 重命名后输出记录,便于核对

预期输出示例

假设测试文件夹中有 report.txt、data.csv、notes.md 三个文件,运行当天日期为2025年1月15日,则预期输出为:

已重命名: report.txt -> 20250115_report.txt
已重命名: data.csv -> 20250115_data.csv
已重命名: notes.md -> 20250115_notes.md
完成:重命名 3 个文件,跳过 0 个文件。

再次运行同一命令,预期输出为:

完成:重命名 0 个文件,跳过 3 个文件。