You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求修改HandBrake批处理脚本:转码后保留目录结构输出至指定路径

修复HandBrakeCLI批处理脚本:按原目录结构输出转码文件并删除原文件

你当前脚本的核心问题是move命令的路径拼接逻辑错误——直接将原文件的完整驱动器+路径拼到目标目录后,会生成无效的嵌套路径(比如E:\downloads\converted\E:\downloads\complete\Some Subfolder\...),导致无法按原目录结构输出。以下是修改后的完整脚本:

@echo off
setlocal enabledelayedexpansion

:: 定义核心路径和工具变量,方便后续维护修改
set "SOURCE_DIR=E:\downloads\complete"
set "TARGET_DIR=E:\downloads\converted"
set "HANDBRAKE_CLI=D:\HandBrakeCLI\HandBrakeCLI.exe"
set "PRESET_FILE=D:\HandBrakeCLI\VCEmp4HVEC.json"
set "PRESET_NAME=VCEmp4HVEC"

:: 遍历源目录下所有指定格式的视频文件
for /R "%SOURCE_DIR%" %%F in (*.mkv,*.avi,*.mp4) do (
    :: 执行转码,临时输出到原文件同目录
    "%HANDBRAKE_CLI%" --preset-import-file "%PRESET_FILE%" -Z "%PRESET_NAME%" -i "%%~fF" -o "%%~dpF%%~nF.mp4"
    
    :: 检查转码是否成功生成文件
    if exist "%%~dpF%%~nF.mp4" (
        :: 提取原文件相对于源目录的路径部分(去掉源目录前缀)
        set "RELATIVE_PATH=%%~dpF"
        set "RELATIVE_PATH=!RELATIVE_PATH:%SOURCE_DIR%=!"
        
        :: 在目标目录创建对应的子目录(不存在则创建)
        if not exist "%TARGET_DIR%!RELATIVE_PATH!" mkdir "%TARGET_DIR%!RELATIVE_PATH!"
        
        :: 将转码后的文件移动到目标目录的对应路径
        move "%%~dpF%%~nF.mp4" "%TARGET_DIR%!RELATIVE_PATH!%%~nF.mp4"
        
        :: 删除原文件
        del "%%~fF"
    )
)

endlocal

关键逻辑说明

  • setlocal enabledelayedexpansion:启用延迟变量扩展,确保循环内修改的变量能实时读取到最新值。
  • 路径变量定义:把源目录、目标目录、工具路径都设为变量,后续修改时不用逐行查找。
  • 相对路径提取:通过字符串替换,去掉原文件路径中的源目录前缀,得到相对于源目录的子路径。
  • 目录预创建:转码文件移动前先创建目标子目录,避免因路径不存在导致move失败。
  • 操作顺序:先确认转码成功,再移动文件,最后删除原文件,避免转码失败时误删原文件。

内容的提问来源于stack exchange,提问作者Jarrett Tennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:54