如何编写批处理脚本:监控FFBatch CPU使用率后自动整理Proxy文件
视频制作Proxy文件自动化处理需求与问题
- 从事视频制作工作,需使用FFBatch批量生成Proxy文件(低画质视频文件,用于提升剪辑流畅度)
- 现有流程:
- 通过批处理脚本启动FFBatch自动渲染,Proxy文件输出至原文件目录下的Proxy子文件夹
- 手动执行另一批处理脚本,递归将所有Proxy文件夹内的文件移动至父目录下的「03. Proxy」文件夹,并删除空Proxy目录
- 期望实现自动化:在启动FFBatch的脚本中调用监控脚本,每10秒检查FFBatch对应进程
RenderQuery的CPU使用率,当使用率低于2%时自动执行上述文件移动与目录删除操作 - 遇到的问题:自行编写的两类监控批处理脚本运行时窗口闪一下即关闭,无法正常工作
尝试的监控脚本示例1
SET ProcessorUsage = wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime | findstr /i /c:RenderQuery :Loop IF %ProcessorUsage% LSS 2 ( (for /f "delims=" %%X in ('dir /s/b/ad Proxy') do for /f "delims=" %%Y in ('dir /s/b/a-d "%%X"') do move "%%Y" ".\03. Proxy") && (for /f "delims=" %%i in ('dir /s/b/ad Proxy') do rd "%%i") ) ELSE ( sleep 10 && goto Loop )
尝试的监控脚本示例2
SET ProcessorUsage = wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime | findstr /i /c:RenderQuery :Loop for %ProcessorUsage% LSS 2 do ( (for /f "delims=" %%X in ('dir /s/b/ad Proxy') do for /f "delims=" %%Y in ('dir /s/b/a-d "%%X"') do move "%%Y" ".\03. Proxy") && (for /f "delims=" %%i in ('dir /s/b/ad Proxy') do rd "%%i") || (sleep 10 && goto Loop) )
可行实现方案
原脚本问题分析
SET命令中变量名与等号之间不能有空格,否则会创建带空格的无效变量- 直接用
SET捕获命令输出无效,必须通过for /f解析wmic的输出结果 sleep命令并非Windows原生命令,部分环境无法识别,需替换为timeout- 循环逻辑错误,需每次循环重新获取CPU使用率,而非仅初始化一次
修正后的监控批处理脚本
@echo off setlocal enabledelayedexpansion :MonitorLoop :: 获取RenderQuery进程的CPU使用率,处理wmic格式问题 set "cpu_usage=0" for /f "skip=1 tokens=2 delims= " %%a in ('wmic path Win32_PerfFormattedData_PerfProc_Process where Name^="RenderQuery" get PercentProcessorTime 2^>nul') do ( set "cpu_usage=%%a" ) :: 去除输出中的空格与换行符 for /f "tokens=* delims= " %%a in ("!cpu_usage!") do set "cpu_usage=%%a" echo 当前RenderQuery进程CPU使用率:!cpu_usage!%% :: 判断CPU使用率是否低于2% if !cpu_usage! LSS 2 ( echo 开始执行文件移动与目录清理... :: 确保目标目录存在 if not exist ".\03. Proxy" mkdir ".\03. Proxy" :: 递归移动文件并删除空目录 for /f "delims=" %%X in ('dir /s/b/ad Proxy') do ( for /f "delims=" %%Y in ('dir /s/b/a-d "%%X\*.*"') do ( move "%%Y" ".\03. Proxy\" ) rd "%%X" ) echo 操作完成,退出监控 goto :EOF ) else ( echo CPU使用率高于2%,10秒后重新检查... timeout /t 10 /nobreak >nul goto MonitorLoop ) endlocal
使用说明
- 将上述脚本保存为
MonitorRender.bat - 在启动FFBatch的批处理脚本末尾添加调用命令:
start "" "MonitorRender.bat",监控脚本会在独立窗口运行,不阻塞FFBatch执行 - 确认
RenderQuery是FFBatch渲染时的正确进程名,可通过任务管理器核实
内容的提问来源于stack exchange,提问作者Tyrone Hirt
相关产品推荐
相关产品推荐

