如何编写可限制最大16个并发进程的Windows批处理脚本以完成WAV文件转码
如何编写可限制最大16个并发进程的Windows批处理脚本以完成WAV文件转码
当然可以实现!针对你的16核CPU,我们可以写一个批处理脚本,它会实时监控当前运行的fdkaac.exe进程数量,一旦少于16个就启动新的转码任务,直到所有WAV文件都处理完毕——完美匹配你的需求。
下面是直接可用的脚本,我会一步步给你拆解说明:
@echo off setlocal enabledelayedexpansion :: 设置最大并发数,对应你的16核CPU set "max_concurrent=16" :: 初始化当前运行的进程计数器 set "running=0" :: 遍历文件夹下所有WAV文件 for %%i in (*.wav) do ( :: 循环检查当前运行的fdkaac进程数 :check_running set "running=0" :: 统计当前正在运行的fdkaac进程数量 for /f %%a in ('tasklist /fi "imagename eq fdkaac.exe" /nh /fo csv ^| find /c ","') do set "running=%%a" :: 如果当前进程数已经达到上限,等待1秒后再检查 if !running! geq %max_concurrent% ( timeout /t 1 /nobreak >nul goto check_running ) :: 启动新的转码进程,加/b会在后台运行(不弹出新窗口);如果要独立命令窗口,删掉/b即可 start /b "" fdkaac.exe -b256 -w20000 "%%i" echo 已启动转码任务:"%%i",当前并发数:!running! ) :: 等待所有剩余的转码进程完成 :wait_for_finish set "running=0" for /f %%a in ('tasklist /fi "imagename eq fdkaac.exe" /nh /fo csv ^| find /c ","') do set "running=%%a" if !running! gtr 0 ( echo 等待剩余!running!个转码任务完成... timeout /t 2 /nobreak >nul goto wait_for_finish ) echo 所有WAV文件转码完成! endlocal
关键部分说明
setlocal enabledelayedexpansion:必须开启这个选项,因为我们需要在循环里动态更新running变量的数值,延迟扩展能让变量在循环内实时生效。tasklist统计逻辑:用tasklist过滤出fdkaac.exe进程,通过CSV格式输出后统计行数(逗号数量对应进程数),以此精准掌握当前并发量。- 并发控制逻辑:每次启动新任务前先检查当前进程数,达到16就等待1秒再重试,确保不会超过核心负载。
- 后台/窗口选项:
start /b会让转码进程在后台运行,不弹出新命令窗口;如果你确实需要每个任务都有独立窗口,删掉/b即可,并发控制逻辑不受影响。
小提示
- 若运行时遇到
tasklist权限问题,右键以管理员身份运行批处理即可。 - 测试时可以先拿几个WAV文件试手,确认并发数确实被限制在16以内,再批量处理1000个文件。
- 脚本里的
timeout /t 1是检查间隔,1秒的间隔既不会浪费CPU资源,也不会让新任务等待太久。
内容来源于stack exchange
相关产品推荐
相关产品推荐

