![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-25 08:34 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » for中set的一个问题 |
| 可打印版本 1,036 / 10 |
| 第1楼 zqdarkday | 发表于 2007-05-26 20:33 |
| 中级用户 发帖 79 积分 210 来自 湖北 | |
|
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) 谢谢大家了 |
|
| 第2楼 bjsh | 发表于 2007-05-26 20:35 |
| 银牌会员 发帖 621 积分 2,000 | |
|
set /a a=%%l-1
for /l in (start , step , %a%) |
|
| 第3楼 ccwan | 发表于 2007-05-27 09:11 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
for /l in (start , step , %a%)这样不带参数的句子是不能成立的。
for /l %%a in (start , step , %a%) 红色是必须的部分 |
|
| 第4楼 qzwqzw | 发表于 2007-05-27 16:17 |
| 银牌会员 发帖 636 积分 2,343 | |
|
for 的 begin,step,end 在for内部是无法更改的
所以2楼的代码达不到预期的目的 解决的办法是不用for而用goto loop |
|
| 第5楼 lxmxn | 发表于 2007-05-27 16:47 |
| 版主 发帖 4,938 积分 11,386 | |
|
Re qzwqzw:
如果启用了变量延迟也未尝不可. |
|
| 第6楼 qzwqzw | 发表于 2007-05-27 17:00 |
| 银牌会员 发帖 636 积分 2,343 | |
|
这与zqdarkday的原意似有不同
他要控制的当前的for进程 for嵌套也许可以折中实现他的意图 但算法思想是完全不同的 --------------------------------------- 当然 在for中加上if+goto的跳转也可以实现4楼的目的 不同这样的句式看起来比较别扭 |
|
| 第7楼 bjsh | 发表于 2007-05-27 18:55 |
| 银牌会员 发帖 621 积分 2,000 | |
|
lz确实是要for嵌套的;
他私下发短消息给我了; 就是嵌套;我已经给他答复了; 我觉得qzwqzw兄的说法有误:
兄的意思是这样不能实现了? 不会啊;这样写没问题啊; 结果为:
[ Last edited by bjsh on 2007-5-27 at 06:59 PM ] |
|
| 第8楼 qzwqzw | 发表于 2007-05-27 19:55 |
| 银牌会员 发帖 636 积分 2,343 | |
|
嗨,说两岔了
我的意思是for无法在其内部更改自己的first,step,end 从而动态控制自己的循环进程 也就是说,类似这样的句式达不到预期的目的,即使开启延迟扩展 我将楼主的两个FOR理解为了一个FOR |
|
| 第9楼 qjbm | 发表于 2007-05-29 14:11 |
| 初级用户 发帖 44 积分 125 | |
|
总算又看见qzwqzw,
自从上次你说心情不好需要调整就没再见到你出代码, 今天上来就又学到一点知识,原来这样也可以. for /l %%a in (1,50,163-1) do echo %%a 是在测试2楼代码时发现的,我还在纳闷,为什么是set,而不是set /a |
|
| 第10楼 lxmxn | 发表于 2007-05-29 16:59 |
| 版主 发帖 4,938 积分 11,386 | |
|
To bjsh:
对于你的举的例子,个人感觉举得有点不“合理”,因为“for /l %%a in (1,50,%a%) do echo %%a”,%a%为163,162,……152,151,都可以使结果为 ,因为增量是50,所以%a%的值在151和200之间,都可以显示上面的几个数字。 对于for /L内部,正如 qzwqzw 所说是无法改变的,请看例子。 结果是1……9,而并非1……10(9+1)。这里的+只是一个“分隔符”,- 号亦是如此。 结果也是1……9,而并非1……6(9-3)。 结果仍然是1……9。 $for /l %a in (1,1,9+1,1,2,3,4,5,) do @echo %a |
|
| 第11楼 bjsh | 发表于 2007-05-29 17:16 |
| 银牌会员 发帖 621 积分 2,000 | |
|
我明白你们的意思;
是我开始理解差了; 我以为 qzwqzw 兄的意思是指 for /l in ()你的 只能是常量 而不能是环境变量; qzwqzw 说的是一个for中 ; 这个我理解; 因为一开始 lz 发短消息给我; 他的代码是 两个for; 所以我的思维一直是两个for 的; 正如 第 8 楼 所说 说两叉了 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |