文件批量重命名

原文地址: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

▶ 可以在关于或者这篇文章找到我的联系方式。
▶ 本网站的部分内容可能来源于网络,仅供大家学习与参考,如有侵权请联系我核实删除。
我是小章,目前全职提供电脑维修和IT咨询服务。如果您有任何电脑相关的问题,都可以问我噢。


文件批量重命名
https://itxiaozhang.com/batch-file-renaming/
作者
小章
发布于
2024年7月3日
许可协议