2011-06-27 72 views
11

我试图打印出多个随机数,但在for循环中使用,它不重置变量。这是我的代码。在Windows批处理文件中的“for”循环中随机变量不变

@echo off 


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

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

) 


echo Complete 

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

+0

上面没有道理的脚本。变量“随机”不是由任何设置,因此检查器始终为空。另外%% i%也没有意义..它应该是%%我。如果你对问题的描述稍微好一些,我认为这可以在没有使用延迟扩展的情况下工作。 – djangofan

回答

15

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

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

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

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

@echo off 

setlocal EnableDelayedExpansion 

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

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

) 

endlocal 

echo Complete 

正如你所看到的,setlocal EnableDelayedExpansion使特殊处理的延迟扩展语法,这是周围的变量名!!而非%小号。

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

+0

非常感谢。我写了一个Linux shell,我试图将它转移到Windows批处理,所以我在语法上稍微落后。不过,我真的很感激。再次感谢! – mike

0

我的系统上我写的

set checker=Random 

代替

set checker=!Random! 
相关问题