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

时间:2011-06-27 23:51:34

标签: windows random batch-file for-loop

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

@echo off


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

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

)   


echo Complete

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

2 个答案:

答案 0 :(得分:16)

我不确定你怎么能打印一个随机数。在您的情况下,%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。

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

答案 1 :(得分:0)

在我的系统上我必须写

set checker=Random

而不是

set checker=!Random!