#!/usr/bin/env python3 """ fix_commas_and_pad_multi.py 批量修复多个文件夹中含逗号的数字文件名并补齐到6位,例如: "01,000.png" -> "001000.png" 支持扫描指定文件夹中所有以"25"开头的子文件夹 """ import os import argparse VALID_EXTS = {'.png', '.exr'} def safe_rename(src, dst, dry_run=False): if os.path.exists(dst): print(f"[跳过] 目标已存在,未重命名:{os.path.basename(src)} -> {os.path.basename(dst)}") return False print(f"[重命名] {os.path.basename(src)} -> {os.path.basename(dst)}") if not dry_run: os.rename(src, dst) return True def fix_folder(root_folder, dry_run=False): changed = 0 for root, dirs, files in os.walk(root_folder): for fname in files: name, ext = os.path.splitext(fname) if ext.lower() not in VALID_EXTS: continue # 若文件名中含逗号,则移除逗号 if ',' in name: candidate = name.replace(',', '') else: candidate = None if candidate is None or not candidate.isdigit(): continue padded = candidate.zfill(6) if padded == name: continue src_path = os.path.join(root, fname) dst_path = os.path.join(root, padded + ext) if safe_rename(src_path, dst_path, dry_run=dry_run): changed += 1 print(f"[完成] {root_folder} 共重命名 {changed} 个文件。\n") def find_25_folders(root_folder): """查找所有以'25'开头的子文件夹""" folders = [] for item in os.listdir(root_folder): item_path = os.path.join(root_folder, item) if os.path.isdir(item_path) and item.startswith('25'): folders.append(item_path) return folders def main(): p = argparse.ArgumentParser( description="修复含逗号的数字文件名并补齐到6位,例如 01,000.png -> 001000.png(扫描指定文件夹中所有以25开头的子文件夹)" ) p.add_argument("root_folder", help="包含多个以25开头的子文件夹的根目录") p.add_argument("--dry-run", action="store_true", help="仅模拟显示将要做的重命名,不执行") args = p.parse_args() if not os.path.isdir(args.root_folder): print(f"❌ 路径无效:{args.root_folder}") return target_folders = find_25_folders(args.root_folder) if not target_folders: print(f"❌ 在 {args.root_folder} 中未找到以'25'开头的子文件夹") return print(f"\n=== 在 {args.root_folder} 中找到 {len(target_folders)} 个以'25'开头的子文件夹 ===") for folder in target_folders: print(f"\n=== 处理文件夹:{folder} ===") fix_folder(folder, dry_run=args.dry_run) if __name__ == "__main__": main()