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

如何编写可限制最大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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:29:36