中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 环境变量延迟问题 上一主题 | 下一主题
btpg
新手上路





积分 17
发帖 19
注册 2010-3-22
来自 湖北
状态 离线
『楼 主』:  环境变量延迟问题

@echo off&color a
setlocal enabledelayedexpansion
set /a a=1,b=1
:begin
set /a a=!a!*3
echo 3的!b!次方等于:!a!
set /a b=!b!+1
if b leq 10 goto :begin
pause

看上去没什么问题呀?为什么不行呢?

[ Last edited by btpg on 2010-4-11 at 15:46 ]

2010-4-11 15:45
查看资料  发送邮件  发短消息 网志  OICQ (136949034)  编辑帖子  回复  引用回复
btpg
新手上路





积分 17
发帖 19
注册 2010-3-22
来自 湖北
状态 离线
『第 2 楼』:  

已经搞清楚了,原来是
if b leq 10 goto :begin
这句出了问题,改成:
if !b! leq 10 goto :begin
就成了

还是要多练习呀!!

[ Last edited by btpg on 2010-4-11 at 16:42 ]

2010-4-11 16:01
查看资料  发送邮件  发短消息 网志  OICQ (136949034)  编辑帖子  回复  引用回复
btpg
新手上路





积分 17
发帖 19
注册 2010-3-22
来自 湖北
状态 离线
『第 3 楼』:  


@echo off&color a
set /a a=1,b=1
:begin
set /a a=%a%*3
echo 3的%b%次方等于:%a%
set /a b=%b%+1
if %b% leq 10 goto :begin
pause
呃……,貌似这样也可以呵…………

好像不是变量延迟的问题………………

呃呵…………呵

2010-4-11 16:32
查看资料  发送邮件  发短消息 网志  OICQ (136949034)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by btpg at 2010-4-11 15:45:
@echo off&color a
setlocal enabledelayedexpansion
set /a a=1,b=1
:begin
set /a a=!a!*3
echo 3的!b!次方等于:!a!
set /a b=!b!+1
if b leq 10 goto :begin
pause

看上去没什么问 ...

if b leq 10 goto :begin在这里b是字符,不是变量,因为没用%或!括起来,字符b永远大于数字10,所以goto :begin永远不会执行。

  Quote:
Originally posted by btpg at 2010-4-11 16:32:
@echo off&color a
set /a a=1,b=1
:begin
set /a a=%a%*3
echo 3的%b%次方等于:%a%
set /a b=%b%+1
if %b% leq 10 goto :begin
pause
呃……,貌似这样也可以呵 ...

本版内搜索关键词“预处理”和“变量延迟”

这个也可以这样写:
@echo off&color a
set/a a=1,b=1
:begin
set/a a=a*3
echo 3的%b%次方等于:%a%
set/a b=b+1
if %b% leq 10 goto :begin
pause
这里的set/a a=a*3实际就是set/a a=%a%*3


@echo off&setlocal enabledelayedexpansion
color a&set a=1
for /l %%i in (1 1 10) do set/a a=a*3&echo 3的%%i次方等于:!a!
pause
这里的set/a a=a*3实际就是set/a a=!a!*3

[ Last edited by Hanyeguxing on 2010-4-11 at 19:31 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 btpg 分数: +1  时间:2010-4-15 13:44




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-11 19:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: