递归处理MP4的批处理脚本重命名失效,求纯批处理替代方案
纯批处理递归处理MP4文件并重命名的解决方案
原脚本依赖外部PowerShell脚本完成重命名,递归子文件夹时容易出现不可靠问题。以下是无需额外脚本的纯批处理方案,直接在循环内完成元数据修改、原文件删除和重命名操作:
@echo off setlocal enabledelayedexpansion :: 递归遍历所有.mp4文件 for /r %%I in (*.mp4) do ( :: 定义临时输出文件路径 set "temp_output=%%~pnI_2.mp4" :: 用FFmpeg添加音视频轨道语言元数据,复制流不重新编码 ffmpeg.exe -i "%%I" -metadata:s:v:0 language=eng -c:v copy -metadata:s:a:0 language=eng -c:a copy "!temp_output!" :: 检查FFmpeg执行状态,成功才继续后续操作 if !errorlevel! equ 0 ( :: 删除原文件 del /Q "%%I" :: 将临时文件重命名为原文件名 rename "!temp_output!" "%%~nxI" ) else ( :: 处理失败时清理临时文件并提示 echo 处理失败:"%%I" if exist "!temp_output!" del /Q "!temp_output!" ) ) endlocal
关键说明:
- 启用
enabledelayedexpansion实现循环内变量的动态赋值与读取,确保子文件夹内的文件路径处理正确 - 仅在FFmpeg成功处理文件后,才删除原文件并重命名临时文件,避免意外丢失原文件
- 去掉了外部PowerShell脚本依赖,所有操作在单个批处理循环内完成,彻底解决递归场景下的重命名不可靠问题
内容的提问来源于stack exchange,提问作者AndyM
相关产品推荐
相关产品推荐

