中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 17:20
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 环境变量延迟问题 查看 750 回复 3
楼 主 环境变量延迟问题 发表于 2010-04-11 15:45 ·  中国 湖北 武汉 教育网
新手上路
积分 17
发帖 19
注册 2010-03-22 20:52
16年会员
UID 162805
性别 男
来自 湖北
状态 离线
@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 ]
2 发表于 2010-04-11 16:01 ·  中国 湖北 武汉 教育网
新手上路
积分 17
发帖 19
注册 2010-03-22 20:52
16年会员
UID 162805
性别 男
来自 湖北
状态 离线
已经搞清楚了,原来是

if b leq 10 goto :begin

这句出了问题,改成:

if !b! leq 10 goto :begin

就成了

还是要多练习呀!!

[ Last edited by btpg on 2010-4-11 at 16:42 ]
3 发表于 2010-04-11 16:32 ·  中国 湖北 武汉 教育网
新手上路
积分 17
发帖 19
注册 2010-03-22 20:52
16年会员
UID 162805
性别 男
来自 湖北
状态 离线

@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

呃……,貌似这样也可以呵…………

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

呃呵…………呵
4 发表于 2010-04-11 19:19 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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永远不会执行。
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-04-15 13:44
论坛跳转: