外观
文件批量重命名工具
约 576 字大约 2 分钟
Python文件处理批量操作
2024-10-16
一个强大的 Python 脚本,支持使用正则表达式批量重命名文件,提供演示模式确保安全操作。
功能特性
| 特性 | 说明 |
|---|---|
| 🔍 正则表达式 | 强大的模式匹配和替换功能 |
| 🛡️ 演示模式 | 预览重命名结果,不实际修改文件 |
| 📁 批量处理 | 一次性处理整个目录的文件 |
| ✅ 错误处理 | 捕获并显示重命名过程中的错误 |
快速开始
# 使用 curl 下载
curl -sL https://script.merma.cn/scripts/python/utils/batch_rename.py -o batch_rename.py
# 或使用 wget 下载
wget https://script.merma.cn/scripts/python/utils/batch_rename.py
# 运行脚本
python3 batch_rename.py演示效果
# 将 .txt 改为 .md
python batch_rename.py /path/to/dir "\.txt$" ".md"
# 扫描目录: /path/to/dir
# 匹配模式: \.txt$
# 替换为: .md
# 模式: 执行模式
# --------------------------------------------------
# file1.txt -> file1.md
# file2.txt -> file2.md
# --------------------------------------------------
# 已重命名 2 个文件环境要求
- Python 3.6+
- 无需额外依赖(仅使用标准库)
脚本源码
点击展开查看完整源码
#!/usr/bin/env python3
"""
文件批量重命名工具
批量重命名指定目录下的文件,支持正则表达式替换
"""
import os
import re
import argparse
from pathlib import Path
__version__ = "1.0.0"
def rename_files(directory, pattern, replacement, dry_run=False):
"""批量重命名文件"""
count = 0
path = Path(directory)
if not path.exists():
print(f"错误: 目录 '{directory}' 不存在")
return 0
print(f"扫描目录: {directory}")
print(f"匹配模式: {pattern}")
print(f"替换为: {replacement}")
print(f"模式: {'演示模式' if dry_run else '执行模式'}")
print("-" * 50)
for file_path in path.iterdir():
if file_path.is_file():
old_name = file_path.name
new_name = re.sub(pattern, replacement, old_name)
if old_name != new_name:
print(f"{old_name} -> {new_name}")
if not dry_run:
try:
new_path = file_path.parent / new_name
file_path.rename(new_path)
count += 1
except Exception as e:
print(f" 错误: {e}")
else:
count += 1
print("-" * 50)
print(f"{'将会' if dry_run else '已'}重命名 {count} 个文件")
return count
def main():
parser = argparse.ArgumentParser(
description="批量重命名文件工具",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例:
%(prog)s /path/to/dir "\\.txt$" ".md" # 将 .txt 改为 .md
%(prog)s /path/to/dir "^old" "new" # 将 old 开头改为 new
%(prog)s /path/to/dir "\\s+" "_" --dry-run # 将空格替换为下划线(演示)
"""
)
parser.add_argument('directory', help='目标目录路径')
parser.add_argument('pattern', help='正则表达式匹配模式')
parser.add_argument('replacement', help='替换字符串')
parser.add_argument('-d', '--dry-run', action='store_true',
help='演示模式,不实际重命名文件')
parser.add_argument('-v', '--version', action='version',
version=f'%(prog)s {__version__}')
args = parser.parse_args()
rename_files(args.directory, args.pattern, args.replacement, args.dry_run)
if __name__ == '__main__':
main()下载: batch_rename.py