中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: for中set的一个问题 上一主题 | 下一主题
zqdarkday
中级用户




积分 210
发帖 79
注册 2007-4-14
来自 湖北
状态 离线
『楼 主』:  for中set的一个问题

我有个关于set的问题 例如我在for中,有个数字163我已经设为%%l 我用set把变量 l 减1赋值给变量a, 再把变量a放在for /l in (start,step,end)的end中。 请问该怎么做? 只用写个set和for /l in (start,step,end) 谢谢大家了


2007-5-26 20:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 2 楼』:  

set /a a=%%l-1 for /l in (start , step , %a%)


2007-5-26 20:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 3 楼』:  

for /l in (start , step , %a%)这样不带参数的句子是不能成立的。 for /l %%a in (start , step , %a%) 红色是必须的部分




三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
2007-5-27 09:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 4 楼』:  

for 的 begin,step,end 在for内部是无法更改的 所以2楼的代码达不到预期的目的 解决的办法是不用for而用goto loop
@echo off
set /a i=0,step=1,end=163

:loop
echo. i=%i%,step=%step%,end=%end%
set /a i+=1
set /a end-=i
if 1%i% leq 1%end% goto loop


2007-5-27 16:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

Re qzwqzw: 如果启用了变量延迟也未尝不可.
@echo off&Setlocal EnableDelayedExpansion

for /l %%a in (1,3,7) do (
	set /a a=%%a+10
	echo. a=!a!
	for /l %%b in (10,1,!a!) do (
		echo. %%%%a-%%%%b=%%a-%%b
	)
)
pause	


2007-5-27 16:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 6 楼』:  

这与zqdarkday的原意似有不同 他要控制的当前的for进程 for嵌套也许可以折中实现他的意图 但算法思想是完全不同的 --------------------------------------- 当然 在for中加上if+goto的跳转也可以实现4楼的目的 不同这样的句式看起来比较别扭


2007-5-27 17:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 7 楼』:  

lz确实是要for嵌套的; 他私下发短消息给我了; 就是嵌套;我已经给他答复了; 我觉得qzwqzw兄的说法有误:
所以2楼的代码达不到预期的目的
@echo off
for %%l in (163) do set a=%%l-1
for /l %%a in (1,50,%a%) do echo %%a
兄的意思是这样不能实现了? 不会啊;这样写没问题啊; 结果为:
1 51 101 151
[ Last edited by bjsh on 2007-5-27 at 06:59 PM ]


2007-5-27 18:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 8 楼』:  

嗨,说两岔了 我的意思是for无法在其内部更改自己的first,step,end 从而动态控制自己的循环进程 也就是说,类似这样的句式达不到预期的目的,即使开启延迟扩展
@echo off & setlocal enabledelayedexpansion
set /a begin=0,step=1,end=163

for /l %%i in (!begin! !step! !end!) do (
    echo.Current:i=%%i, begin=!begin!, step=!step!, end=!end!
    set /a end-=step
)
我将楼主的两个FOR理解为了一个FOR


2007-5-27 19:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qjbm
初级用户





积分 125
发帖 44
注册 2007-1-24
状态 离线
『第 9 楼』:  

总算又看见qzwqzw, 自从上次你说心情不好需要调整就没再见到你出代码, 今天上来就又学到一点知识,原来这样也可以. for /l %%a in (1,50,163-1) do echo %%a 是在测试2楼代码时发现的,我还在纳闷,为什么是set,而不是set /a




ELSE 是不是阑尾?
2007-5-29 14:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

To bjsh: 对于你的举的例子,个人感觉举得有点不“合理”,因为“for /l %%a in (1,50,%a%) do echo %%a”,%a%为163,162,……152,151,都可以使结果为
1 51 101 151
,因为增量是50,所以%a%的值在151和200之间,都可以显示上面的几个数字。 对于for /L内部,正如 qzwqzw 所说是无法改变的,请看例子。
for /l %a in (1,1,9+1) do @echo %a
结果是1……9,而并非1……10(9+1)。这里的+只是一个“分隔符”,- 号亦是如此。
for /l %a in (1,1,9-3) do @echo %a
结果也是1……9,而并非1……6(9-3)。
for /l %a in (1,1,9+1,1,2,3,4,5,) do @echo %a
结果仍然是1……9。
$for /l %a in (1,1,9+1,1,2,3,4,5,) do @echo %a 1 2 3 4 5 6 7 8 9


2007-5-29 16:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 11 楼』:  

我明白你们的意思; 是我开始理解差了; 我以为 qzwqzw 兄的意思是指 for /l in ()你的 只能是常量 而不能是环境变量; qzwqzw 说的是一个for中 ; 这个我理解; 因为一开始 lz 发短消息给我; 他的代码是 两个for; 所以我的思维一直是两个for 的; 正如 第 8 楼 所说 说两叉了


2007-5-29 17:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: