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

如何将多段MP4处理批处理脚本合并为单个优化脚本

合并优化后的MP4批量处理批处理脚本

以下是整合了全部五个操作的单一批处理脚本,针对数千文件场景做了IO优化,提升执行速度:

@echo off
setlocal enabledelayedexpansion

:: 可配置参数 - 根据需求修改
SET MAIN_DIR=%cd%
SET BATCH_SIZE=60          :: 第一次分组:每个文件夹存放的MP4数量
SET FOLDER_BATCH=15        :: 第二次分组:每个父文件夹包含的子文件夹数量
SET TEMP_PREFIX=tmp_rnd_   :: 随机重命名的临时前缀,避免与原有文件名冲突

:: -------------------------- 步骤1:归集子文件夹MP4到主目录并删除空文件夹 --------------------------
echo 正在归集子文件夹中的MP4文件...
for /r "%MAIN_DIR%" %%f in (*.mp4) do (
    :: 跳过主目录下的MP4,只处理子文件夹中的
    if not "%%~dpnf"=="%MAIN_DIR%\%%~nf" (
        move /y "%%f" "%MAIN_DIR%\" >nul
    )
)

echo 正在清理空文件夹...
:: 从最深层文件夹开始删除,确保父文件夹能被正确识别为空
for /f "delims=" %%d in ('dir /ad /b /s "%MAIN_DIR%" ^| sort /r') do (
    rd "%%d" 2>nul
)

:: -------------------------- 步骤2:随机重命名打乱文件顺序 --------------------------
echo 正在随机重命名MP4文件...
for %%f in (*.mp4) do (
    :RENAME_RETRY
    :: 生成高随机性的临时文件名,降低重名概率
    SET RAND_NAME=!TEMP_PREFIX!!RANDOM!!RANDOM!!RANDOM!
    if exist "!RAND_NAME!.mp4" goto RENAME_RETRY
    ren "%%f" "!RAND_NAME!.mp4"
)

:: -------------------------- 步骤3:计数重命名确保完全混合 --------------------------
echo 正在计数重命名MP4文件...
SET SEQ_COUNT=1
for %%f in (!TEMP_PREFIX!*.mp4) do (
    :: 生成4位序号,文件超过10000个可调整为5位(!NUM:~-5!)
    SET SEQ_NUM=0000!SEQ_COUNT!
    SET SEQ_NUM=!SEQ_NUM:~-4!
    ren "%%f" "!SEQ_NUM!.mp4"
    SET /A SEQ_COUNT+=1
)

:: -------------------------- 步骤4:按指定数量分组MP4到子文件夹 --------------------------
echo 正在按%BATCH_SIZE%个文件一组创建子文件夹...
SET GROUP_NUM=1
SET FILE_CNT=0
for %%f in (*.mp4) do (
    if !FILE_CNT! equ 0 (
        SET GROUP_NAME=FILE_GROUP_!GROUP_NUM!
        mkdir "!GROUP_NAME!" >nul
        SET /A GROUP_NUM+=1
    )
    move "%%f" "!GROUP_NAME!\" >nul
    SET /A FILE_CNT+=1
    if !FILE_CNT! equ %BATCH_SIZE% SET FILE_CNT=0
)

:: -------------------------- 步骤5:按指定数量二次分组文件夹 --------------------------
echo 正在按%FOLDER_BATCH%个文件夹一组创建父文件夹...
SET PARENT_NUM=1
SET FOLDER_CNT=0
:: 遍历所有FILE_GROUP开头的子文件夹
for /f "delims=" %%d in ('dir /ad /b FILE_GROUP_*') do (
    if !FOLDER_CNT! equ 0 (
        SET PARENT_NAME=FOLDER_GROUP_!PARENT_NUM!
        mkdir "!PARENT_NAME!" >nul
        SET /A PARENT_NUM+=1
    )
    move "%%d" "!PARENT_NAME!\" >nul
    SET /A FOLDER_CNT+=1
    if !FOLDER_CNT! equ %FOLDER_BATCH% SET FOLDER_CNT=0
)

echo 所有处理操作已完成!
endlocal

优化说明

  • 启用延迟变量扩展:解决循环中变量值无法实时更新的问题,避免逻辑错误,提升执行效率。
  • 减少磁盘扫描:用for /r一次性遍历所有子文件夹的MP4,避免重复扫描磁盘。
  • 高效清理空文件夹:从最深层文件夹开始删除,确保父文件夹在子文件夹清空后能被正确识别并删除。
  • 低冲突随机命名:三重%RANDOM%生成临时文件名,配合循环重试机制,彻底避免重名问题。
  • 批量IO操作:分组时每满指定数量才新建文件夹并移动文件,减少mkdir和move的调用次数,降低磁盘IO开销。

内容的提问来源于stack exchange,提问作者Ionut Bejinariu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:10:31