批处理循环中RANDOM函数失效求助:启用延迟扩展仍输出相同值
解决FOR循环中RANDOM值固定的问题
你的问题出在随机数生成的位置——TrackNumber是在FOR循环外部定义的,只会生成一次随机值,循环过程中不会重新计算,所以每次输出都是同一个数。
把随机数生成语句移到FOR循环内部,就能让每次循环都生成新的随机数:
setlocal EnableDelayedExpansion FOR /F "tokens=*" %%G IN ('dir /b *.mp4') DO ( set /A TrackNumber=!RANDOM! %% 3 + 1 echo !TrackNumber! ffmpeg -i "%%G" -i !TrackNumber!.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map 0:v -map "[a]" -c:v copy -ac 2 -shortest .%%~nG.mp4 )
补充说明
- 延迟扩展
EnableDelayedExpansion已经正确启用,循环内部用!RANDOM!和!TrackNumber!可以实时读取变量的最新值。 - 每次进入循环体重新执行
set /A TrackNumber=!RANDOM! %% 3 + 1,会生成1-3之间的新随机数,实现循环内的随机效果。
内容的提问来源于stack exchange,提问作者Axl Alert
相关产品推荐
相关产品推荐

