随机变量在Windows批处理文件中的"for"循环中没有变化

mik*_*ike 13 windows random for-loop batch-file

我试图多次打印一个随机数,但在我使用的for循环中,它不会重置变量.这是我的代码.

@echo off


for %%i in (*.txt) do (

set checker=%Random%
echo %checker%
echo %%i% >> backupF 

)   


echo Complete
Run Code Online (Sandbox Code Playgroud)

有5个文本文件,所以我希望它打印5个不同的随机数,但它只打印相同的随机数5次.任何帮助将不胜感激.谢谢!

And*_*y M 18

我不知道你怎么能打印出一个随机数.在您的情况下,%checker%应该评估为空字符串,除非您从同一cmd会话中多次运行您的脚本.

基本上,脚本无法按预期工作的原因是因为循环体中的变量在循环执行之前被解析和计算.当主体执行时,已经评估了变量并且在所有迭代中使用相同的值.

因此,您需要的是延迟评估,否则称为延迟扩展.首先需要启用它,然后使用特殊语法.

这是您修改的脚本,以便使用延迟扩展:

@echo off

setlocal EnableDelayedExpansion

for %%i in (*.txt) do (

set checker=!Random!
echo !checker!
echo %%i% >> backupF

)

endlocal

echo Complete
Run Code Online (Sandbox Code Playgroud)

如您所见,setlocal EnableDelayedExpansion对延迟扩展语法启用特殊处理,这是!围绕变量名称而不是%s.

您仍然可以使用立即扩展(使用%)它可以正常工作(基本上,在括号内的命令块之外).