目的是为了解决在 VCB-Studio、Lolihouse 等压制组下载的 BDrip 动漫无法被 TinyMediaManager 正确地搜索并且刮削的问题。修改文件名后,文件就能被 TinyMediaManager 正确地搜索并且刮削了。
这个程序是用 Python 写的,主要用于修改文件名,并将文件移动到新的文件夹中。
import os
import re
import shutil
folder_path = os.path.dirname(os.path.abspath(__file__)) #获取当前文件所在的文件夹
season_folder = "Season X" #新建文件夹的名称
# 指定文件扩展名
extensions = ('.mkv', '.ass', '.ssa', '.mp4')
# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
# 如果文件名以指定扩展名结尾
if file_name.endswith(extensions):
matchs = re.finditer(r'\d{2}', file_name)
for match in matchs:
num = match.group()
# 构造新的文件名
new_file_name = num + file_name[-4:]
# 构造新的文件路径
new_file_path = os.path.join(folder_path, new_file_name)
# 构造旧的文件路径
old_file_path = os.path.join(folder_path, file_name)
if os.path.exists(new_file_path):
#文件已经存在,打印日志
print(f"{new_file_path} already exists, skipping.")
else:
#记录文件的时间戳
old_time = os.path.getmtime(old_file_path)
os.rename(old_file_path, new_file_path)
os.utime(new_file_path,(old_time,old_time))
break
#创建新文件夹
season_folder_path = os.path.join(folder_path,season_folder)
if not os.path.exists(season_folder_path):
os.makedirs(season_folder_path)
#移动文件
for file_name in os.listdir(folder_path):
if file_name.endswith(extensions):
src_path = os.path.join(folder_path, file_name)
dst_path = os.path.join(season_folder_path, file_name)
shutil.move(src_path, dst_path)
在这段代码中,首先使用 'os.path.dirname(os.path.abspath(__file__))' 来获取当前文件所在的文件夹的路径,然后遍历文件夹中的所有文件。对于文件名以指定扩展名结尾的文件,使用正则表达式 're.finditer(r'\d{2}', file_name) '来匹配文件名中的二位数字,并取第一个。然后构造新的文件名,比如将 "[ReinForce] Bakemonogatari - 01 (BDRip 1920x1080 x264 FLAC).mkv" 改为 "01.mkv"。
接着使用 'os.rename(old_file_path, new_file_path) '来重命名文件,并使用 'os.makedirs(season_folder_path) '创建一个新的文件夹。最后使用 'shutil.move(src_path, dst_path) '将文件移动到新的文件夹中。
程序中也有判断文件是否存在,如果存在就不做修改。
使用这个程序非常简单,只需要把程序文件放在需要重命名文件的文件夹里,并运行程序即可。
程序会自动扫描文件夹中的文件,对于满足条件的文件进行重命名并移动到新文件夹中。
如果需要更改新文件夹的名称,可以在程序中修改:
season_folder = "Season X" #新建文件夹的名称
如果需要匹配其他格式的文件,可以在程序中修改:
extensions = ('.mkv', '.ass', '.ssa', '.mp4')
如果需要重命名的文件不在当前目录,可以在程序中修改:
folder_path = os.path.dirname(os.
如果修改文件名后不需要移动文件到新文件夹,可以在程序中删除下面这段代码:
#创建新文件夹
season_folder_path = os.path.join(folder_path,season_folder)
if not os.path.exists(season_folder_path):
os.makedirs(season_folder_path)
#移动文件
for file_name in os.listdir(folder_path):
if file_name.endswith(extensions):
src_path = os.path.join(folder_path, file_name)
dst_path = os.path.join(season_folder_path, file_name)
shutil.move(src_path, dst_path)
这段代码用于创建新文件夹和移动文件,删除这段代码后就不会有文件被移动到新文件夹中了。
在使用程序之前,请注意备份文件夹中的文件,因为程序将会直接修改文件名并移动文件。
程序运行完成后,注意修改文件夹名Season X