中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 15:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 奇怪的 SET /a ? 查看 1,001 回复 7
楼 主 奇怪的 SET /a ? 发表于 2007-03-02 02:26 ·  中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154
发帖 1,827
注册 2003-07-18 00:00
23年会员
UID 7105
性别 男
状态 离线
下面的批处理为什么第二句的SET没有执行?

@echo off
set /a num=4
for %%a in (*.*) do (
set /a num +=1
echo %num%
)

值总是4,也显示4
可是,在退出整个程序后,用 ECHO %num%, 值却是正确的!

[ Last edited by GOTOmsdos on 2007-3-2 at 02:34 AM ]
2 发表于 2007-03-02 02:44 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  呵呵,这个牵涉到变量的延迟问题,可以参考这个帖子:什么情况下该使用变量延迟?
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2007-03-02 02:47 ·  中国 江苏 苏州 联通
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
19年会员
UID 60484
状态 离线
我想,应该是变量延迟的关系吧。
开头加上 setlocal enabledelayedexpansion
FOR 中间的变量把这种形式:%var%,换成这种形式!var!
4 发表于 2007-03-02 04:10 ·  中国 甘肃 甘南藏族自治州 合作市 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
willsort 大大 讲的好
5 发表于 2007-03-02 05:33 ·  中国 河南 郑州 联通
初级用户
积分 88
发帖 40
注册 2006-12-26 07:32
19年会员
UID 74591
性别 男
状态 离线
恩,看看2楼NA斑竹说的那个帖子就好了...总之就是,因为你在FOR语句后又要用到你前面已经申明的变量,所以要用变量延迟
6 发表于 2007-03-02 05:58 ·  中国 四川 绵阳 江油市 电信
高级用户
★★★
积分 502
发帖 327
注册 2006-12-30 06:01
19年会员
UID 74981
性别 男
状态 离线
用这个学习延时变量好方便哦,比文字说明好多了,收藏了
7 发表于 2007-03-04 10:02 ·  中国 浙江 绍兴 电信
高级用户
★★★
Autowalk
积分 845
发帖 375
注册 2007-03-03 01:58
19年会员
UID 80606
性别 男
状态 离线
我用的时候是错误的,NUM始终都是4,你的FOR语句好象有错误的吧?
8 发表于 2007-03-04 10:10 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
将 echo %num% 改为 call echo %%num%% 也可以
论坛跳转: