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


  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 ]