龙空技术网

黑客必修16:批处理高级语句——环境变量延迟扩展(4)

鱼跃刺桐 45

前言:

如今同学们对“c语言中delay如何定义”都比较关心,姐妹们都想要知道一些“c语言中delay如何定义”的相关内容。那么小编同时在网络上汇集了一些对于“c语言中delay如何定义””的相关文章,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

四,什么时候使用延迟变量?如何使用?

什么时候使用延迟变量?如何使用?这些一直是使新手困惑的地方,那到底是怎么样的呢?那请看下面的例子,我们将一步步引导大家。

例1,

@echo off

set /a num=0

for /l %%i in (1 1 3) do (

Rem ================================

set /a num =1

Rem 原意是变量num的值每次都加1

Rem ================================

echo %num%

)

pause>nul

先猜猜看,运行之后的结果是什么呢?你是不是认为它会显示:1 2 3 呢?我想大部分人会这么认为。你再将以上代码保存为批处理文件,运行,看看结果。

你会看到,显示的结果并不是意料中的 1 2 3 而是 0 0 0,这个是为什么呢?

原来这个是因为,批处理在处理for 或者if 语句中的变量时,先要进行预处理,把其中的用%%括起来的变量,先替换为语句之前的变量(如上面的代码,for语句中的%num%早就被替换为语句前的 值:0),所以,for语句运行时,虽然已经给变量加了1,但是,值却不变(因为echo %num%中的%num%早已被替换为:0了)。

那么,要实现(for或者if)语句中的变量实时的变化(如这里,我就要将1 2 3 显示出来)要怎么办呢?那就要起用延迟变量,先在批处理中申明:setlocal enabledelayedexpansion 然后,将语句:echo %num%改成!num!(也就是将“%”改成“!”),这样就可以达到效果了,演示代码:

例2,

@echo off

Rem ''''///////下面先申明起用延迟变量/////////////

setlocal enabledelayedexpansion

set /a num=0

for /l %%i in (1 1 3) do (

Rem ================================

set /a num =1

Rem 变量num的值每次都加1

Rem ================================

Rem '''''''//////////////////下面的变量不能再用"%"括起来,而应该用"!"////////////

echo !num!

)

pause>nul

归纳总结:

1、为什么要用延迟变量?

让if语句和for语句中的变量实时变化;

2、什么时候用延迟变量?

一般是用在 for 语句和 if 语句中;

3、怎么用延迟变量?

先在批处理中申明起用延迟变量:setlocal enabledelayedexpansion

然后将 for 语句、if语句中的变量用两个"!"括起来即可

4、其实在使用变量嵌套变量也可以使用变量延迟的。

例3,

@echo off

set a=1

set b1=10

echo %b%a%%

pause

执行显示,得到 %b1%

其实我想得到的是 赋予b1的值,即 10 那么如何实现呢?将上例修改如下,

例4,

@echo off

set a=1&set b1=10

call,echo %%b%a%%%

pause>nul

call 这里实际是对命令行进行重新组织扩展,先扩展%%b%a%%%里面的%a%,使%a%变成a的值1,再用cal来扩展%b1%。

也可以用变量延迟来实现,方法如下:

例5,

@echo off

set /a a=1,b1=10

Setlocal EnableDelayedExpansion

echo:!b%a%! ...

pause

call 在这里的用法实际是变量延迟的一种快捷方式,变量延迟一般用在for的循环体里面。

call,%%b%a%%% 这里的逗号实际是一个分隔符,和空格一样,还有很多分隔符可用,比如上例中的 echo:!b%a%! ,当然并不是所有的命令都可以这样用,看情况而定……

例6,

@echo off&setlocal enabledelayedexpansion

set a=1000

set b=dd

set a%b%=9000

set c=!a%b%!

echo %c%

pause

执行一下,看看显示的将是什么?为什么是这样?相信通过例4,例5你也能分析得出来吧?

标签: #c语言中delay如何定义