原文地址:https://itxiaozhang.com/batch-file-renaming/
如果您需要远程电脑维修或者编程开发,请加我微信咨询。

本文配合视频食用效果最佳,视频教程在文章末尾。

客户需求

目前有很多文件,文件名的格式类似于"附件n,其他内容",其中n是一个数字。我希望将所有以"附件n"开头的文件名中的数字n增加m,文件名中的其他部分应保持不变。假设m=8,举例如下:

原来的名称修改后的名称
附件1-其他内容.txt附件9-其他内容.txt
附件2-其他内容2.pdf附件10-其他内容2.pdf
附件11-其他名称.txt附件19-其他名称.txt

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import os
import re
import logging
from pathlib import Path
import argparse

def setup_logging(log_file):
    """
    设置日志记录的配置,同时输出到文件和控制台。
    """
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s',
        handlers=[
            logging.FileHandler(log_file),
            logging.StreamHandler()
        ]
    )

def rename_files(directory, number_to_add):
    """
    重命名指定目录及其子目录中的文件。
    """
    pattern = re.compile(r'^附件(\d+)(.*)$')  # 匹配以“附件数字”开头的文件名
    total_renamed_count = 0
    total_error_count = 0

    for root, _, files in os.walk(directory):
        renamed_count = 0
        error_count = 0

        for filename in files:
            match = pattern.match(filename)
            if match:
                try:
                    number = int(match.group(1))  # 提取文件名中的数字部分
                    rest = match.group(2)         # 提取文件名中的其余部分
                    new_number = number + number_to_add
                    new_filename = f'附件{new_number}{rest}'  # 构造新的文件名

                    old_file = Path(root) / filename
                    new_file = Path(root) / new_filename

                    old_file.rename(new_file)  # 重命名文件
                    renamed_count += 1
                    total_renamed_count += 1
                except Exception as e:
                    logging.error(f'Error renaming file {filename}: {e}')
                    error_count += 1
                    total_error_count += 1

        logging.info(f'在目录 "{root}" 中修改了 {renamed_count} 个文件。')

    logging.info(f'Renaming complete. {total_renamed_count} files renamed, {total_error_count} errors occurred.')

def main():
    """
    主程序入口,解析命令行参数并调用重命名函数。
    """
    parser = argparse.ArgumentParser(description='重命名目录及其子目录中的文件。')
    parser.add_argument('--dir', type=str, default=os.getcwd(), help='要处理的目录 (默认: 当前目录)')
    parser.add_argument('--log', type=str, default='rename_log.txt', help='日志文件名 (默认: rename_log.txt)')
    args = parser.parse_args()

    setup_logging(args.log)

    try:
        number_to_add = 8  # 用户输入的增量m,这里设置为固定值8
    except ValueError:
        print("请输入一个有效的整数。")
        return

    rename_files(args.dir, number_to_add)

    input("操作完成。按 Enter 键退出。")

if __name__ == '__main__':
    main()

目录结构

1
2
3
4
5
|   rename_files.py.py
\---文件夹1
        附件11,其他名称.txt
        附件149,其他名称.pdf
        附件149,其他名称1.txt