[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理for循环为何不能显示变量的值?

  1. for /f %%i in (a.txt) do (
  2. set b=i
  3. echo %b%
  4. )
复制代码
为什么不能显示b的值

本帖最后由 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
复制代码
***共同提高***

TOP

楼上正解~~查看基础教程的全局变量延迟~就知道原因了~
活着就是为了改变世界

TOP

call,echo%%str%%
这个call, 让我觉得语法古怪,学之慢
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 4# PowerShell


    英文逗号和句号,可以被识别为空格,所以等同于加了一个空格
1

评分人数

TOP

如果能再详细讲一下CALL ECHO 就更好了

TOP

回复 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. )
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表