批处理for /f循环失效求助:无法执行ffprobe相关操作
批处理for /f循环不执行的问题排查与解决
问题原因
你的核心问题是for /f的tokens参数设置错误:
- 你通过
-of csv=p=0让ffprobe输出的是纯时长数字(比如4.129546),没有任何逗号分隔的字段 - 但你给for /f指定了
tokens=3,5,要求提取第3和第5个分隔字段——显然不存在这样的内容,导致for /f找不到符合条件的行,直接跳过了do子句的执行
修正后的脚本
把内层for /f的tokens=3,5移除(或改为tokens=1),同时确保延迟扩展的正确使用,修正后的代码如下:
setlocal enabledelayedexpansion for %%b in (*.wav) do ( set duration=0 for /f %%a in ('ffprobe -i "%%b" -show_entries format^=duration -v quiet -of csv^=p^=0') do ( set "duration=%%a" echo 'asdf' >> test.txt echo 文件名: %%b, 时长: !duration! ) ) endlocal
补充说明
- 移除
tokens=3,5后,for /f会默认提取整行内容,正好匹配ffprobe输出的纯时长数字 - 嵌套循环中使用
duration变量时,必须用延迟扩展语法!duration!,不能用普通的%duration% - 你脚本中的
^=转义是正确的,不需要修改
内容的提问来源于stack exchange,提问作者Dmytro Lysak
相关产品推荐
相关产品推荐

