Board logo

标题: [其他] 批处理for循环为何不能显示变量的值? [打印本页]

作者: blueskybat    时间: 2013-9-11 13:20     标题: 批处理for循环为何不能显示变量的值?

  1. for /f %%i in (a.txt) do (
  2. set b=i
  3. echo %b%
  4. )
复制代码
为什么不能显示b的值
作者: batman    时间: 2013-9-11 16:28

本帖最后由 batman 于 2013-9-11 19:33 编辑

这种情况下必须要开启变量延迟,具体在论坛搜索“变量延迟”或“预处理”
  1. @echo off
  2. rem 下面是开启全局变量延迟的命令
  3. setlocal enabledelayedexpansion
  4. for /f %%i in (a.txt) do (
  5.   set "str=%%i"
  6.   echo,!str!
  7. )
  8. pause>nul
复制代码
也可以用call来临时开启延迟变量
  1. @echo off
  2. for /f %%i in (a.txt) do (
  3.   set "str=%%i"
  4.   call,echo,%%str%%
  5. )
  6. pause>nul
复制代码

作者: 林小七    时间: 2013-9-11 17:50

楼上正解~~查看基础教程的全局变量延迟~就知道原因了~
作者: PowerShell    时间: 2013-9-11 18:40

call,echo%%str%%
这个call, 让我觉得语法古怪,学之慢
作者: hzcxdgioa    时间: 2013-9-11 21:54

回复 4# PowerShell


    英文逗号和句号,可以被识别为空格,所以等同于加了一个空格
作者: suseek    时间: 2013-9-12 09:51

如果能再详细讲一下CALL ECHO 就更好了
作者: cjiabing    时间: 2013-9-12 10:18

回复 1# blueskybat


    可以简单地理解为,如果你要在FOR里面使用SET的话,通常(非绝对)都先声明setlocal EnableDelayedExpansion,并将变量的百分号改为感叹号,这就是传说中的“变量延迟”。
比如:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for %%a in (AAA) do (
  4. set a=123
  5. echo !a!
  6. )
复制代码

作者: Batcher    时间: 2013-9-12 10:47

回复 6# suseek


http://bbs.bathome.net/thread-2900-1-1.html




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