标题: [其他] 批处理for循环为何不能显示变量的值? [打印本页]
作者: blueskybat 时间: 2013-9-11 13:20 标题: 批处理for循环为何不能显示变量的值?
- for /f %%i in (a.txt) do (
- set b=i
- echo %b%
- )
复制代码
为什么不能显示b的值
作者: batman 时间: 2013-9-11 16:28
本帖最后由 batman 于 2013-9-11 19:33 编辑
这种情况下必须要开启变量延迟,具体在论坛搜索“变量延迟”或“预处理”- @echo off
- rem 下面是开启全局变量延迟的命令
- setlocal enabledelayedexpansion
- for /f %%i in (a.txt) do (
- set "str=%%i"
- echo,!str!
- )
- pause>nul
复制代码
也可以用call来临时开启延迟变量- @echo off
- for /f %%i in (a.txt) do (
- set "str=%%i"
- call,echo,%%str%%
- )
- 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,并将变量的百分号改为感叹号,这就是传说中的“变量延迟”。
比如:
-
- @echo off
- setlocal EnableDelayedExpansion
- for %%a in (AAA) do (
- set a=123
- echo !a!
- )
复制代码
作者: Batcher 时间: 2013-9-12 10:47
回复 6# suseek
http://bbs.bathome.net/thread-2900-1-1.html
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |