随机variables在windowsbatch file中的“for”循环中不变

我试图打印出一个随机数多次,但在我使用的循环,它不会重置variables。 这是我的代码。

@echo off for %%i in (*.txt) do ( set checker=%Random% echo %checker% echo %%i% >> backupF ) echo Complete 

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

我不确定你是如何打印一个随机数字的。 在你的情况下, %checker%应该计算为一个空字符串,除非你从同一个cmd会话中多次运行你的脚本。

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

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

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

 @echo off setlocal EnableDelayedExpansion for %%i in (*.txt) do ( set checker=!Random! echo !checker! echo %%i% >> backupF ) endlocal echo Complete 

正如您所看到的, setlocal EnableDelayedExpansion可以对延迟扩展语法进行特殊处理,即! s围绕变量名称而不是% s。

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

在我的系统上,我必须写

 set checker=Random 

代替

 set checker=!Random!