【问题标题】:Random variable not changing in "for" loop in windows batch fileWindows批处理文件中的“for”循环中随机变量不变
【发布时间】:2011-06-27 23:51:34
【问题描述】:

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

@echo off


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

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

)   


echo Complete

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

【问题讨论】:

  • 上面的脚本没有意义。变量“Random”不是由任何东西设置的,因此 checker 始终为空。另外 %%i% 也没有意义..应该是 %%i 。如果您对问题的描述好一点,我认为这可以在不使用延迟扩展的情况下工作。

标签: windows random batch-file for-loop


【解决方案1】:

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

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

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

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

@echo off

setlocal EnableDelayedExpansion

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

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

)

endlocal

echo Complete

如您所见,setlocal EnableDelayedExpansion 启用了对延迟扩展语法的特殊处理,即在变量名周围使用!s 而不是%s。

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

【讨论】:

  • 非常感谢。我写了一个 Linux shell,我正试图将它转移到 Windows 批处理,所以我在语法上有点落后。不过我真的很感激。再次感谢!
【解决方案2】:

在我的系统上我必须写

set checker=Random

而不是

set checker=!Random!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2012-10-29
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多