本文目录导读:

Python脚本实现
基础版本 - 按序号重命名
import os
def batch_rename(path, prefix="file", start_num=1):
files = os.listdir(path)
for i, filename in enumerate(files, start=start_num):
# 获取文件扩展名
ext = os.path.splitext(filename)[1]
# 新文件名
new_name = f"{prefix}_{i}{ext}"
# 完整路径
old_path = os.path.join(path, filename)
new_path = os.path.join(path, new_name)
os.rename(old_path, new_path)
print(f"重命名: {filename} -> {new_name}")
# 使用示例
batch_rename("./images", "photo", 1)
高级版本 - 支持多种模式
import os
import re
class FileRenamer:
def __init__(self, path):
self.path = path
def add_prefix(self, prefix):
"""添加前缀"""
for filename in os.listdir(self.path):
new_name = f"{prefix}{filename}"
os.rename(
os.path.join(self.path, filename),
os.path.join(self.path, new_name)
)
def replace_text(self, old_text, new_text):
"""替换文本"""
for filename in os.listdir(self.path):
if old_text in filename:
new_name = filename.replace(old_text, new_text)
os.rename(
os.path.join(self.path, filename),
os.path.join(self.path, new_name)
)
def add_date_prefix(self, date_str):
"""添加日期前缀"""
for filename in os.listdir(self.path):
new_name = f"{date_str}_{filename}"
os.rename(
os.path.join(self.path, filename),
os.path.join(self.path, new_name)
)
def change_extension(self, new_ext):
"""修改扩展名"""
for filename in os.listdir(self.path):
name_without_ext = os.path.splitext(filename)[0]
new_name = f"{name_without_ext}.{new_ext}"
os.rename(
os.path.join(self.path, filename),
os.path.join(self.path, new_name)
)
# 使用示例
renamer = FileRenamer("./files")
renamer.add_prefix("2024_")
renamer.replace_text("old", "new")
Shell脚本 (Linux/Mac)
批量添加前缀
#!/bin/bash
# 批量添加前缀
for file in *.jpg; do
mv "$file" "photo_$file"
done
批量替换文件名中的文本
#!/bin/bash
# 替换文件名中的文本
for file in *; do
new_name="${file//old_text/new_text}"
mv "$file" "$new_name"
done
按序号重命名
#!/bin/bash
# 按序号重命名
count=1
for file in *; do
ext="${file##*.}"
mv "$file" "$(printf "file_%03d.%s" $count $ext)"
((count++))
done
Windows批处理
@echo off
setlocal enabledelayedexpansion
:: 批量重命名 - 添加前缀
set count=1
for %%f in (*.jpg) do (
ren "%%f" "photo_%%f"
)
:: 批量重命名 - 按序号
set count=1
for %%f in (*.txt) do (
ren "%%f" "file_!count!.txt"
set /a count+=1
)
使用Pathlib (Python 3.4+)
from pathlib import Path
def smart_rename(path, pattern="*"):
"""智能重命名"""
path = Path(path)
for file in path.glob(pattern):
if file.is_file():
# 获取文件信息
stem = file.stem # 文件名(不含扩展名)
suffix = file.suffix # 扩展名
# 示例:添加修改日期
import datetime
mod_time = file.stat().st_mtime
date_str = datetime.datetime.fromtimestamp(mod_time).strftime("%Y%m%d")
new_name = f"{date_str}_{stem}{suffix}"
file.rename(path / new_name)
高级功能 - 正则表达式重命名
import os
import re
def regex_rename(path, pattern, replacement):
"""使用正则表达式重命名"""
for filename in os.listdir(path):
new_name = re.sub(pattern, replacement, filename)
if new_name != filename:
os.rename(
os.path.join(path, filename),
os.path.join(path, new_name)
)
# 示例:将 "IMG_20240101_001.jpg" 转为 "photo_20240101_001.jpg"
regex_rename("./photos", r"^IMG_", "photo_")
# 示例:删除文件名中的数字
regex_rename("./docs", r"\d+", "")
使用建议
- 先测试:重要文件先备份或使用
--dry-run参数 - 正则表达式:处理复杂命名规则时非常有用
- 异常处理:添加try-except避免错误中断
- 图形界面:使用Tkinter或PyQt创建GUI版本
需要我帮你写一个特定场景的重命名脚本吗?