如何在Shell脚本或Python中批量给MP4文件按序添加序号前缀?
给MP4文件批量添加序号前缀的解决方案
一、Shell脚本修复与说明
你的原脚本有几个问题导致结果不符合预期:
- 变量
n被设为字符串01,直接写n+01只会拼接成01+01,不会执行数值加法 - 变量替换语法错误,应该是
${f%.mp4}而非{f%.mp4},而且这么写会丢失原文件的.mp4后缀,其实直接用$f就能保留完整原文件名 - 序号没有正确递增,需要用数值运算更新
n
修正后的Shell脚本:
n=1 for f in *.mp4; do # 把序号格式化为两位数字,不足补0 new_name=$(printf "%02d. %s" "$n" "$f") # 重命名文件,-- 避免文件名以-开头时出错 mv -- "$f" "$new_name" # 序号递增 n=$((n+1)) done
关键说明:
printf "%02d. %s":%02d确保序号是两位(比如1变成01,12保持12),%s直接用原文件名,保留所有后缀和特殊字符mv -- "$f" "$new_name":双引号包裹文件名,避免文件名含空格、特殊字符时出错;--处理文件名以-开头的情况n=$((n+1)):用数值运算让序号每次加1
二、Python实现方案
如果你更熟悉Python,这个方案更易读且跨平台:
import os # 获取当前目录下所有mp4文件,按文件名排序(保证顺序稳定) mp4_files = sorted(f for f in os.listdir('.') if f.endswith('.mp4')) # 从1开始给文件加序号前缀 for idx, filename in enumerate(mp4_files, start=1): # 格式化序号为两位数字,拼接原文件名 new_filename = f"{idx:02d}. {filename}" # 执行重命名 os.rename(filename, new_filename)
关键说明:
sorted(...):对文件列表排序,确保序号和文件名的顺序一致;如果想按文件创建时间排序,可以改成:mp4_files = sorted( [f for f in os.listdir('.') if f.endswith('.mp4')], key=lambda x: os.path.getctime(x) )enumerate(..., start=1):直接从1开始计数,不用手动维护序号变量f"{idx:02d}. {filename}":用f-string快速格式化,语法简洁直观
内容的提问来源于stack exchange,提问作者JoshuaForsyth
相关产品推荐
相关产品推荐

