Board logo

标题: [数值计算] bat里for /l %%A IN (,,) DO {}的循环体里怎么用循环变量 [打印本页]

作者: iangie    时间: 2018-3-6 15:36     标题: bat里for /l %%A IN (,,) DO {}的循环体里怎么用循环变量

大家好,

本人才接触bat批处理 问的问题很基础 大家不要笑。。。
请教大家一个问题,也许是关于变量延迟定义的(不太清楚)

在如下的代码中,A和Count是什么关系? 为什么“SET /A Count+=3” 在 “Echo A is now %%A” 之前 ,结果却显示%%A与Count的值是一样的?
  1. @Echo off
  2. setlocal enabledelayedexpansion
  3. SET /A Count=1
  4. for /L %%A in (1, 3, 73) do (  
  5. Echo A is now !Count!
  6. SET /A Count+=3
  7. Echo A is now %%A
  8. )
  9. ping 127.1 -n 6 >nul
复制代码
如果把这两句调换,得到的结果还是一样的:
  1. @Echo off
  2. setlocal enabledelayedexpansion
  3. SET /A Count=1
  4. for /L %%A in (1, 3, 73) do (  
  5. Echo A is now !Count!
  6. Echo A is now %%A
  7. SET /A Count+=3
  8. )
  9. ping 127.1 -n 6 >nul
复制代码
但是如果把这个自加放到循环体的第一句,则会即时计算:
  1. @Echo off
  2. setlocal enabledelayedexpansion
  3. SET /A Count=1
  4. for /L %%A in (1, 3, 73) do (
  5. SET /A Count+=3
  6. Echo A is now !Count!
  7. Echo A is now %%A
  8. )
  9. ping 127.1 -n 6 >nul
复制代码
求大神指点! SET /A Count+=3  到底是不是即时计算?还是有变量延迟? 谢谢
作者: ivor    时间: 2018-3-6 19:48

cho A is now !Count!
SET /A Count+=3

是执行顺序问题,和即时计算、变量延迟没有一毛钱关系
作者: iangie    时间: 2018-3-15 15:20

是执行顺序问题,和即时计算、变量延迟没有一毛钱关系
ivor 发表于 2018-3-6 19:48


就是改变了行的顺序,却没有改变输出结果。麻烦你看一下,谢谢。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2