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()
|