![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 15:18 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请教 for /l 语句中的 set /a 问题 |
| 可打印版本 2,508 / 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*=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: 兄不必这么客气啊,大家都在论坛里也是个缘分,共同学习共同进步嘛。 看到兄这些时的进步不小,真为兄感到高兴。 |
|
| 第10楼 lxmxn | 发表于 2007-03-11 10:03 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by oilio at 2007-3-10 20:21: 兄的理解有点偏差,这里一共是递增了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 |