该脚本用于Windows系统下批量重命名文件,可以将文件名中的某些字符串删除或者替换为指定字符串。
输入:
- 目标文件夹:目标文件夹的绝对路径,将会从该文件夹递归查询目标文件
- 目标文件后缀:查询的文件后缀,比如
mp4
- 待替换字符串:支持正则表达式,注意转义字符,比如:
\[.*\]
- 替换成的字符串:如果为空将会删除待替换的字符串
import re
from pathlib import Path
"""
该脚本用于Windows系统下批量重命名文件,可以将文件名中的某些字符串删除或者替换为指定字符串。
输入:
目标文件夹:目标文件夹的绝对路径,将会从该文件夹递归查询目标文件
目标文件后缀:查询的文件后缀,比如mp4
待替换字符串:支持正则表达式,注意转义字符,比如:\\[.*\\]
替换成的字符串:如果为空将会删除待替换的字符串
"""
def batch_rename_files():
dir_name = input("请输入目标文件夹:")
suffix = input("请输入目标文件后缀:")
replace_str = input("请输入待替换字符串(支持正则表达式):")
replaced_str = input("请输入替换成的字符串:(为空表示删除,选填):")
pattern = re.compile("^.*(" + replace_str + ").*$")
if not Path(dir_name).exists():
raise RuntimeError(f"目标文件不存在:{dir_name}")
if not Path(dir_name).is_dir():
raise RuntimeError(f"目标不是文件夹类型:{dir_name}")
p = Path(dir_name)
all_files = [i for i in p.glob(f"**/*.{suffix}") if not i.is_dir()]
for file in all_files:
file_name = file.name
if not pattern.match(file_name):
continue
result = re.sub(replace_str, lambda x: replaced_str, file_name)
final_path = file.parent.joinpath(result)
if final_path == file:
print(f"skip rename {file} to {final_path} ")
continue
print(f"正在重命名 {file} 为 {final_path} ")
if final_path.exists():
final_path.unlink()
file.rename(final_path)
print("结束执行任务")
input("输入任意字符继续......")
if __name__ == '__main__':
while True:
batch_rename_files()
注意:重命名后的文件如果存在,会先删除旧文件
注意:本文归作者所有,未经作者允许,不得转载