Board logo

标题: 环境变量延迟问题 [打印本页]

作者: btpg     时间: 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

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

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

作者: btpg     时间: 2010-4-11 16:01
已经搞清楚了,原来是

if b leq 10 goto :begin

这句出了问题,改成:

if !b! leq 10 goto :begin

就成了

还是要多练习呀!!

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

作者: btpg     时间: 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

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

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

呃呵…………呵

作者: Hanyeguxing     时间: 2010-4-11 19:19
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 ]