原文地址: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 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咨询服务。如果您有任何电脑相关的问题,都可以问我噢。