本文目录导读:

是的,有很多实用脚本可以批量重命名文件,以下是几种常见且实用的方法:
Python脚本(最灵活)
import os
def batch_rename(path, prefix="", suffix="", replace_old="", replace_new=""):
for filename in os.listdir(path):
old_path = os.path.join(path, filename)
if os.path.isfile(old_path):
new_name = filename
if prefix:
new_name = prefix + new_name
if suffix:
name, ext = os.path.splitext(new_name)
new_name = name + suffix + ext
if replace_old:
new_name = new_name.replace(replace_old, replace_new)
new_path = os.path.join(path, new_name)
os.rename(old_path, new_path)
print(f"重命名: {filename} -> {new_name}")
# 使用示例
batch_rename("./images", prefix="2024_", suffix="_v2", replace_old="old", replace_new="new")
批量添加编号
import os
def add_numbers(path, start=1, digit=3, position="prefix"):
"""
position: "prefix" 或 "suffix"
"""
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
files.sort()
for i, filename in enumerate(files, start):
name, ext = os.path.splitext(filename)
num = str(i).zfill(digit)
if position == "prefix":
new_name = f"{num}_{filename}"
else:
new_name = f"{name}_{num}{ext}"
os.rename(
os.path.join(path, filename),
os.path.join(path, new_name)
)
print(f"{filename} -> {new_name}")
add_numbers("./photos", start=1, digit=4, position="prefix")
正则表达式替换
import os
import re
def regex_rename(path, pattern, replacement):
for filename in os.listdir(path):
old_path = os.path.join(path, filename)
if os.path.isfile(old_path):
new_name = re.sub(pattern, replacement, filename)
if new_name != filename:
new_path = os.path.join(path, new_name)
os.rename(old_path, new_path)
print(f"{filename} -> {new_name}")
# 示例:去掉文件名中的空格和特殊字符
regex_rename("./files", r'[\s\(\)\[\]]', '_')
提取日期信息重命名
import os
from datetime import datetime
def rename_by_date(path):
for filename in os.listdir(path):
old_path = os.path.join(path, filename)
if os.path.isfile(old_path):
# 获取文件修改时间
timestamp = os.path.getmtime(old_path)
date_str = datetime.fromtimestamp(timestamp).strftime("%Y%m%d")
name, ext = os.path.splitext(filename)
new_name = f"{date_str}_{name}{ext}"
os.rename(old_path, os.path.join(path, new_name))
print(f"{filename} -> {new_name}")
rename_by_date("./documents")
批量转换文件扩展名
import os
import glob
def change_extension(path, old_ext, new_ext):
for file_path in glob.glob(os.path.join(path, f"*.{old_ext}")):
name, _ = os.path.splitext(file_path)
new_file = f"{name}.{new_ext}"
os.rename(file_path, new_file)
print(f"{os.path.basename(file_path)} -> {os.path.basename(new_file)}")
change_extension("./data", "txt", "csv")
使用命令行工具(Windows)
PowerShell脚本:
# 批量添加前缀
Get-ChildItem "C:\path\to\files" -File | ForEach-Object {
Rename-Item $_ -NewName ("prefix_" + $_.Name)
}
# 批量替换文件名中的文字
Get-ChildItem "C:\path\to\files" -File |
Where-Object { $_.Name -match "oldtext" } |
ForEach-Object {
$newName = $_.Name -replace "oldtext", "newtext"
Rename-Item $_ -NewName $newName
}
Linux/macOS bash脚本
#!/bin/bash
# 批量添加序号
i=1
for file in *.jpg; do
mv "$file" "$(printf "%03d_$file" $i)"
((i++))
done
# 批量替换
for file in *.txt; do
mv "$file" "${file//old/new}"
done
使用建议
- 先测试:在子集上测试脚本
- 备份:重要文件先备份
- 打印日志:记录重命名前后的对比
- 使用try/except:处理异常情况
这些脚本可以灵活组合使用,满足各种批量重命名需求,如果需要更复杂的重命名逻辑,可以进一步定制。