中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 15:52
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 请教 for /l 语句中的 set /a 问题
可打印版本  2,510 / 16
第1楼 zhoushijay 发表于 2007-03-09 23:59
高级用户 发帖 375 积分 845
请教 for /l 语句中的 set /a 问题
echo off
set a=0
for /l %%i in (71,1,99) do set /a a+=1 & echo %a%

这里显示%a% 始终都是0 似乎set /a a+=1根本不起作用,请问这是什么原因啊?是不是for /l 中不能使用 set /a ?
第2楼 zh159 发表于 2007-03-10 00:17
金牌会员 发帖 1,467 积分 3,687
LZ没搞懂用法

@echo off
set a=0
for /l %%i in (71,1,99) do set /a a+=1
echo %a%
pause

如果要在同一行使用,必需要启用延迟变量(具体搜索论坛)
第3楼 youxi01 发表于 2007-03-10 01:41
高级用户 发帖 247 积分 846 来自 湖南==》广东
@echo off
set a=0
for /l %%i in (71,1,99) do set /a a+=1 & call echo %%a%%

pause>nul
第4楼 oilio 发表于 2007-03-11 01:54
高级用户 发帖 303 积分 641
我也有一个不明白的地方,“set /a a+=1”,这句是啥意思啊?关键是a+=1这个用法是干什么的?哪位知道的朋友告诉我一下,谢谢了。
第5楼 zhoushijay 发表于 2007-03-11 02:00
高级用户 发帖 375 积分 845
set /a a+=1 意思等于 set /a a=%a%+1
第6楼 oilio 发表于 2007-03-11 08:19
高级用户 发帖 303 积分 641
谢谢楼上的这位朋友。
第7楼 lxmxn 发表于 2007-03-11 08:34
版主 发帖 4,938 积分 11,386
Originally posted by oilio at 2007-3-10 12:54:
我也有一个不明白的地方,“set /a a+=1”,这句是啥意思啊?关键是a+=1这个用法是干什么的?哪位知道的朋友告诉我一下,谢谢了。

  学过其它的编程语言的朋友可能一看就知道这样的用法,其它类似的用法还有很多,比如:set /a a*=2、set /a a-=5等等,分别表示set /a a=a*2、set /a a=a-5,一般把set /a a+=1成为累加器,每运行一次a的值就加1,主要用来控制程序流程的。
第8楼 oilio 发表于 2007-03-11 09:21
高级用户 发帖 303 积分 641
谢谢lxmxn兄,真不知道说什么好,谢谢!这是我N次看到这个用法,因为之前一直都很弱,现在水平比以前稍微好那么一点,今天再看到这个用法觉得到时候了,忍不住想问,谢谢各位,尤其谢谢lxmxn兄列出好几个列子,lxmxn兄说到累加器,我想那这个批处理用到set /a a+=1,其实主要作用就是计算从71步长值是1递增到99,一共递增了28次,但要得到数字总的个数,次数不包括71本身,所以计算一共是多少个数字就会少一个,所以这里用到set /a a+=1, 不知道我理解的对不对?看样子今天是赚了,一下明白俩。我实践一下,加深印象去了。再次感谢各位。

[ Last edited by oilio on 2007-3-10 at 09:14 PM ]
第9楼 lxmxn 发表于 2007-03-11 09:37
版主 发帖 4,938 积分 11,386
Originally posted by oilio at 2007-3-10 20:21:
谢谢lxmxn兄,真不知道说什么好,谢谢!这是我N次看到这个用法,因为之前一直都很弱,现在水平比以前稍微好那么一点,今天再看到这个用法觉得到 ...

  兄不必这么客气啊,大家都在论坛里也是个缘分,共同学习共同进步嘛。

  看到兄这些时的进步不小,真为兄感到高兴。
第10楼 lxmxn 发表于 2007-03-11 10:03
版主 发帖 4,938 积分 11,386
Originally posted by oilio at 2007-3-10 20:21:
我想那这个批处理用到set /a a+=1,其实主要作用就是计算从77步长值是1递增到99,一共递增了28次,但要得到数字总的个数,次数不包括71本身,所以计算一共是多少个数字就会少一个,所以这里用到set /a a+=1, 不知道我理解的对不对?

  兄的理解有点偏差,这里一共是递增了99-71+1=29次,因为 for /l 循环包含了第一个数字,这里是71,你可以用for /l %a in (1,1,29) do 来试试,结果应该是一样的。set /a a+=1 的作用并不是使其递增数加一,而是使 a 的值没循环一次就增加1,这里循环了29次,所以结果最后应该是29了。
第11楼 oilio 发表于 2007-03-11 10:13
高级用户 发帖 303 积分 641
好像不对啊,我想了一下,假如是for /l %a in (1,1,3)的话,从1到2是递增了1次,从2到3是递增第二次,一共是两次才对啊,这里确实是三个数,但应该递增次数是2次吧。这个命令应该是计算从1到3的个数的吧?不知道是不是我的理解力有问题,呵呵。有的时候感觉挺聪明,有的时候感觉钻牛角尖了,嘿嘿!累了,睡觉了,我再好好想想,说不定我休息一下就能想明白,呵呵。谢谢lxxm兄的回帖,使我收获良多。
第12楼 zhoushijay 发表于 2007-03-11 10:15
高级用户 发帖 375 积分 845
for /l %a in (1,1,3) do
当%a=1时 计一次
当%a=2时 计一次
当%a=3时 计一次
所以应该是3次
第13楼 oilio 发表于 2007-03-11 10:19
高级用户 发帖 303 积分 641
谢谢,周仕杰兄,原来我的问题出在这儿,关键是我说到递增,把这个给忘了。第一个数就开始计数的话,那就对了,是我自己把自己绕进去了,哈哈。谢谢。
第14楼 6622186 发表于 2007-03-15 11:14
高级用户 发帖 411 积分 894
我以前也试了很多次, 不能在同一行使用, 原来用变量延迟就可以了. 具体怎么用啊?
第15楼 zh159 发表于 2007-03-15 11:38
金牌会员 发帖 1,467 积分 3,687
这里变量延迟有两种使用方式:
1、启用变量延迟:

@echo off
setlocal EnableDelayedExpansion
set a=0
for /l %%i in (71,1,99) do set /a a+=1&echo !a!
pause>nul

2、用call

@echo off
set a=0
for /l %%i in (71,1,99) do set /a a+=1&call echo %%a%%
pause>nul
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023