中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 00:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 不能执行set 查看 1,794 回复 18
楼 主 不能执行set 发表于 2006-12-31 02:59 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线

我的程序是:

@echo off
for /l %%a in (1,1,4) do (

set /a n+=1

for /l %%b in (1,1,%n%) do (

echo hello,world )

)
pause

我运行了一下,可就是没有预期的效果。
n 还是一直为零。

也就是说,set 这个循环没有执行,请高手看看 怎么回事?

2 发表于 2006-12-31 03:06 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /l %%a in (1,1,4) do (

set /a n+=1

for /l %%b in (1,1,!n!) do (

echo hello,world )

)
pause

这样试试行不行
3 发表于 2006-12-31 03:11 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
试过了,还是不行啊
4 发表于 2006-12-31 03:13 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
是这样吗?
@echo off
for /l %%a in (1,1,4) do set/a n+=1
for /l %%b in (1,1,%n%) do (
echo hello,world
)
pause
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
5 发表于 2006-12-31 03:18 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  再来一个演示代码:

@echo off&SETLOCAL ENABLEDELAYEDEXPANSION&&(for,/l,%%a,in,(1,1,40),do,(set/a n+=1&(for,/l,%%b,in,(1,1,!n!),do,(set/p=%%b<nul))&echo.))&pause
6 发表于 2006-12-31 03:20 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Originally posted by ccwan at 2006-12-30 14:13:
是这样吗?
@echo off
for /l %%a in (1,1,4) do set/a n+=1
for /l %%b in (1,1,%n%) do (
echo hello,world
)
pause


  这不是楼主要的效果吧?
7 发表于 2006-12-31 03:21 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
好的呀,显示了十次
==呵呵,可以省略掉了

@echo off
for /l %%i in (1,1,4) do (
for /l %%l in (1,1,%%i) do (
echo hello,world)
)
8 发表于 2006-12-31 03:22 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
呵呵,不错。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
9 发表于 2006-12-31 03:23 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
还是不对阿

我分析一下啊

%%a 有4次
那么 n 也就会循环到4
这样%%b 就会 从1到4进行循环

最后的结果应该是
第一次输出1个
第二次输出2个
。。。
。。。

那么总共输出1+2+3+4=10个“hello,world”
俄哦要的就是这个效果

可是你的只有四次,你的set 执行了四次,最后n=4
而没有n=1,2,3的情况使得%%b循环,以至于达不到我要的结果
10 发表于 2006-12-31 03:26 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
everest79

不错,效果是有了

但是你避开了set的有效循环,我既要效果,还有解决set在循环体内部的循环问题

你的真的很不错
我为什么就没有想到
但是我在其他的编程时,同样要碰到set的循环问题,
所以我还是要使得set能够循环
11 发表于 2006-12-31 03:27 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
12 发表于 2006-12-31 03:28 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /l %%a in (1,1,4) do (

set /a n+=1

for /l %%b in (1,1,!n!) do (

echo hello,world )

)
pause

这是发2楼的
13 发表于 2006-12-31 03:29 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
最近越来越不明白大家都在干什么,有什么目的了。
可能我太不适合待下去了,准备潜水……
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
14 发表于 2006-12-31 03:36 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
2楼的
我调适了
不通过

谢谢大家
15 发表于 2006-12-31 03:38 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
ccwan

对不起哦

我不是说你的不行

只是我真的想要set 能在for 中循环

谢谢
我很佩服你的
真的

不要不理我们这帮菜鸟
呵呵
论坛跳转: