中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 14:48
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]百思不解,关于for…… 查看 1,699 回复 2
楼 主 [已结]百思不解,关于for…… 发表于 2006-01-08 20:50 ·  中国 甘肃 兰州 电信
初级用户
积分 90
发帖 38
注册 2006-01-06 18:41
20年会员
UID 48522
状态 离线
dos环境:

Microsoft Windows XP

fl.txt的内容:

1111111111111111111
2222222222222222222
3333333333333333333

批处理内容(test.bat):

@echo off
set var1=00000000000000000
for /f %%i in (fl.txt) do set var1=%%i && echo %var1%
echo %var1%
pause

期望结果是:
1111111111111111111
2222222222222222222
3333333333333333333
3333333333333333333
请按任意键继续. . .

运行结果是:
0000000000000000000
0000000000000000000
0000000000000000000
3333333333333333333
请按任意键继续. . .

从最后的echo %var1%的输出结果:3333333333333333333 可知,在for语句中var1的值的确被修改了,可是为什么在for语句中的echo %var1%仍旧输出初始化的值呢?

[ Last edited by arding on 2006-1-12 at 17:13 ]
2 发表于 2006-01-09 14:41 ·  中国 甘肃 兰州 中国科学院兰州分院
初级用户
积分 90
发帖 38
注册 2006-01-06 18:41
20年会员
UID 48522
状态 离线
唉,没人理。
不过在这里好像讨论的是同样的问题,是不是就没有办法呢?
http://www.cn-dos.net/forum/viewthread.php?tid=18050&fpage=9
3 发表于 2006-01-10 14:34 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re arding:

完成你所需要的功能需要使用新的变量定界符 ! ,要使用这个定界符,需要启动延缓变量扩展,通过 cmd /v:on 或者 setlocal EnableDelayedExpansion 来实现。这些内容,过去的主题中也有不少讨论,可以全文搜索一下。或者直接查看 cmd / setlocal / for
的命令行帮助,下面是你的程序修改后的代码。


@echo off & setlocal EnableDelayedExpansion
set var1=00000000000000000
for /f %%i in (fl.txt) do set var1=%%i && echo !var1!
echo %var1%
pause
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
论坛跳转: