|
zhoushijay
高级用户
Autowalk
积分 845
发帖 375
注册 2007-3-3
状态 离线
|
『楼 主』:
请教 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 ?
|
|
2007-3-9 23:59 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
2 楼』:
LZ没搞懂用法
@echo off
set a=0
for /l %%i in (71,1,99) do set /a a+=1
echo %a%
pause
如果要在同一行使用,必需要启用延迟变量(具体搜索论坛)
|
|
2007-3-10 00:17 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
3 楼』:
@echo off
set a=0
for /l %%i in (71,1,99) do set /a a+=1 & call echo %%a%%
pause>nul
|
|
2007-3-10 01:41 |
|
|
oilio
高级用户
前进者
积分 641
发帖 303
注册 2007-1-10
状态 离线
|
『第
4 楼』:
我也有一个不明白的地方,“set /a a+=1”,这句是啥意思啊?关键是a+=1这个用法是干什么的?哪位知道的朋友告诉我一下,谢谢了。
|
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿! |
|
2007-3-11 01:54 |
|
|
zhoushijay
高级用户
Autowalk
积分 845
发帖 375
注册 2007-3-3
状态 离线
|
『第
5 楼』:
set /a a+=1 意思等于 set /a a=%a%+1
此帖被 +2 点积分 点击查看详情 评分人:【 oilio 】 | 分数: +2 | 时间:2007-3-11 09:21 |
|
|
|
2007-3-11 02:00 |
|
|
oilio
高级用户
前进者
积分 641
发帖 303
注册 2007-1-10
状态 离线
|
『第
6 楼』:
谢谢楼上的这位朋友。
|
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿! |
|
2007-3-11 08:19 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
7 楼』:
Quote: | 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,主要用来控制程序流程的。
此帖被 +4 点积分 点击查看详情 评分人:【 oilio 】 | 分数: +4 | 时间:2007-3-11 09:14 |
|
|
|
2007-3-11 08:34 |
|
|
oilio
高级用户
前进者
积分 641
发帖 303
注册 2007-1-10
状态 离线
|
『第
8 楼』:
谢谢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 ]
|
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿! |
|
2007-3-11 09:21 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by oilio at 2007-3-10 20:21:
谢谢lxmxn兄,真不知道说什么好,谢谢!这是我N次看到这个用法,因为之前一直都很弱,现在水平比以前稍微好那么一点,今天再看到这个用法觉得到 ... |
|
兄不必这么客气啊,大家都在论坛里也是个缘分,共同学习共同进步嘛。
看到兄这些时的进步不小,真为兄感到高兴。
|
|
2007-3-11 09:37 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
10 楼』:
Quote: | 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了。
|
|
2007-3-11 10:03 |
|
|
oilio
高级用户
前进者
积分 641
发帖 303
注册 2007-1-10
状态 离线
|
『第
11 楼』:
好像不对啊,我想了一下,假如是for /l %a in (1,1,3)的话,从1到2是递增了1次,从2到3是递增第二次,一共是两次才对啊,这里确实是三个数,但应该递增次数是2次吧。这个命令应该是计算从1到3的个数的吧?不知道是不是我的理解力有问题,呵呵。有的时候感觉挺聪明,有的时候感觉钻牛角尖了,嘿嘿!累了,睡觉了,我再好好想想,说不定我休息一下就能想明白,呵呵。谢谢lxxm兄的回帖,使我收获良多。
|
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿! |
|
2007-3-11 10:13 |
|
|
zhoushijay
高级用户
Autowalk
积分 845
发帖 375
注册 2007-3-3
状态 离线
|
『第
12 楼』:
for /l %a in (1,1,3) do
当%a=1时 计一次
当%a=2时 计一次
当%a=3时 计一次
所以应该是3次
此帖被 +3 点积分 点击查看详情 评分人:【 oilio 】 | 分数: +3 | 时间:2007-3-11 10:17 |
|
|
|
2007-3-11 10:15 |
|
|
oilio
高级用户
前进者
积分 641
发帖 303
注册 2007-1-10
状态 离线
|
『第
13 楼』:
谢谢,周仕杰兄,原来我的问题出在这儿,关键是我说到递增,把这个给忘了。第一个数就开始计数的话,那就对了,是我自己把自己绕进去了,哈哈。谢谢。
|
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿! |
|
2007-3-11 10:19 |
|
|
6622186
高级用户
积分 894
发帖 411
注册 2007-2-17
状态 离线
|
『第
14 楼』:
我以前也试了很多次, 不能在同一行使用, 原来用变量延迟就可以了. 具体怎么用啊?
|
@set c= 不知则觉多,知则觉少,越知越多,便觉越来越少. --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul
|
|
2007-3-15 11:14 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
15 楼』:
这里变量延迟有两种使用方式:
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
|
|
2007-3-15 11:38 |
|