# 批量重命名 · 课堂演示件
#
# 用法：
#   ① 先运行 第10章演示_生成测试文件夹.py，建立练习用的测试文件夹
#   ② 修改下面【设置区】的三项
#   ③ DRY_RUN 为 True 时只打印不改动。核对无误后改为 False，再运行一次

from pathlib import Path

# ===== 设置区：只需要修改以下三项 =====
FOLDER = '测试文件夹'      # 待处理的文件夹，与本文件位于同一位置
PREFIX = '课堂照片'        # 新文件名的前缀
DRY_RUN = True             # True 为预演，只打印不改动；False 为真正执行
# ====================================

folder = Path(__file__).with_name(FOLDER)

# ① 先取清单：一次性列出文件夹中的文件并排序，再逐个处理
files = sorted(p for p in folder.iterdir() if p.is_file())

records = []
number = 0

# ② 循环：对清单中的每一个文件重复相同的处理
for old in files:

    # ③ 条件判断：只处理图片，其余文件跳过
    if old.suffix.lower() not in ['.jpg', '.png']:
        print('跳过', old.name)
        continue

    # ④ 组成新名称：序号补足三位，扩展名保持原样并统一为小写
    number = number + 1
    new = folder / (PREFIX + '_' + str(number).zfill(3) + old.suffix.lower())

    # ⑤ 重名处理：目标名称已被占用时，在末尾追加 -2
    if new.exists() and new != old:
        new = folder / (new.stem + '-2' + new.suffix)

    print(old.name, '→', new.name)
    records.append(new.name + ' <- ' + old.name)

    # ⑥ 预演状态下到此为止，不做任何实际改动
    if not DRY_RUN:
        old.rename(new)

# ⑦ 真正执行后写入改名记录，作为回退依据
if DRY_RUN:
    print()
    print('以上为预演结果，共', len(records), '个文件待处理。')
    print('核对无误后，把设置区的 DRY_RUN 改为 False，再运行一次。')
else:
    log = Path(__file__).with_name('改名记录.txt')
    log.write_text('\n'.join(records), encoding='utf-8')
    print()
    print('已处理', len(records), '个文件，改名记录已写入', log.name)

input('按回车键结束')
