启动循环时,批处理不会随机工作



为什么它在我的代码中不随机工作?我写了setlocal EnableDelayedExpansion。但在循环中,随机仍然不起作用。保持相同的编号

setlocal EnableDelayedExpansion
set /A TrackNumber=!RANDOM! %% 3 + 1
FOR /F "tokens=*" %%G IN ('dir /b *.mp4') DO (
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
)

我认为即使延迟,它也不会递归扩展。即使可以,您在启用延迟扩展后执行set /A TrackNumber=!RANDOM! ...,因此TrackNumber仅以数字开头,而不是字符串!RANDOM!

您可以每次在循环中更新变量:

@echo off 
setlocal EnableDelayedExpansion
for /L %%a in (0,1,9) do (
set /A TrackNumber=!RANDOM! %% 42 + 1
echo Test#%%a: !TrackNumber!
)

如果出于某种原因,您需要将表达式保留在循环之外:

@echo off
set TrackNumberExpr=%%random%% %%%% 42 + 1
setlocal EnableDelayedExpansion
for /L %%a in (0,1,3) do (
call set /A TrackNumber=!TrackNumberExpr!
echo Test#%%a: !TrackNumber!
)
for /L %%a in (0,1,3) do (
call set /A TrackNumber=!TrackNumberExpr!
echo Test#%%a: !TrackNumber!
)

最新更新