Avi*_*ohn 13 variables batch-file
什么是"变量扩张"?这仅仅意味着"变量定义"还是其他什么?
我说的时候会发生什么setLocal EnableDelayedExpansion?谷歌不清楚.
Aac*_*ini 19
%或!通过它的值.%normal%扩展发生只有一次,之前执行一条线.这意味着%variable%扩展具有相同的值,如果该行被执行多次(例如在for命令中)则无关紧要.!delayed!膨胀进行的每个时间时执行的线.看这个例子:
@echo off
setlocal EnableDelayedExpansion
set "var=Original"
set "var=New" & echo Normal: "%var%", Delayed: "!var!"
Run Code Online (Sandbox Code Playgroud)
输出:
Normal: "Original", Delayed: "New"
Run Code Online (Sandbox Code Playgroud)
另一个:
@echo off
setlocal EnableDelayedExpansion
set "var1=Normal"
set "var2=Delayed"
for /L %%i in (1,1,10) do (
set "var1=%var1% %%i"
set "var2=!var2! %%i"
)
echo Normal: "%var1%"
echo Delayed: "%var2%"
Run Code Online (Sandbox Code Playgroud)
输出:
Normal: "Normal 10"
Delayed: "Delayed 1 2 3 4 5 6 7 8 9 10"
Run Code Online (Sandbox Code Playgroud)
正常扩张不一定是劣势,但取决于它所使用的具体情况.例如,在任何其他编程语言中,要交换两个变量的值,您需要第三个的帮助,但在批处理中,它可以只在一行中完成:
set "var1=%var2%" & set "var2=%var1%"
Run Code Online (Sandbox Code Playgroud)
在批处理变量中,将变量括在百分号中以进行扩展。
set myVariable=Hello world
echo %myVariable%
Run Code Online (Sandbox Code Playgroud)
这意味着变量扩展。
与其他编程语言相比,批处理实际上不能与变量一起使用。
通常,它仅在扩展它们时起作用。
它的工作方式类似于C / C ++的宏扩展。
因此,不存在用于获取变量长度的字符串长度函数,
但是您可以编写一个计算文本字符的函数。
setLocal EnableDelayedExpansion
的说明常规百分比扩展有两个缺点。
扩展发生在解析用圆括号括起来的行或块时,而不是在执行该块时。
让我们看看这个例子
set var=one
set var=two & echo %var%
echo %var%
Run Code Online (Sandbox Code Playgroud)
输出将是
一个
2
由于echo %var%将扩大之前的set var=two将被执行。这可能在FOR循环中出现问题。
第二个缺点是批处理解析器将解析变量的扩展结果。
set var=cat^&dog
echo %var%
Run Code Online (Sandbox Code Playgroud)
var
未知命令“ dog”
但是,自从MS-Dos(1920左右)开始以来,就存在百分比增长。
DelayedExpansion添加了一个新的扩展字符,感叹号!。
但是您必须先激活它才能与一起使用setlocal EnableDelayedExpansion,这是出于与旧程序兼容的原因。
setlocal EnableDelayedExpansion
set var=one
set var=two & echo !var!
set var=cat^&dog
echo !var!
Run Code Online (Sandbox Code Playgroud)
两只
猫和狗
因此,这解决了百分比扩展的两个问题。
| 归档时间: |
|
| 查看次数: |
14672 次 |
| 最近记录: |