欢迎各位兄弟 发布技术文章
这里的技术是共享的
dos setlocal enabledelayedexpansion 是一个批处理脚本命令,用于启用延迟的变量扩展。在批处理脚本中,变量扩展是在行的开始时进行的,意味着如果在同一行上使用了一个变量并改变了它的值,脚本将使用原始值而不是新值。启用延迟的变量扩展可以解决这个问题,因为它使得变量在使用之前在行末进行扩展。
启用延迟的变量扩展后,可以使用叹号 (!) 而不是百分号 (%) 来扩展变量。例如:
setlocal enabledelayedexpansion
set var=original value
echo %var% // 输出 "original value"
set var=new value
echo %var% // 输出 "original value",因为变量扩展发生在行的开始 echo !var! // 输出 "new value",使用了延迟的变量扩展
通过启用延迟的变量扩展,您可以在批处理脚本中更灵活地处理变量,并允许编写更复杂的逻辑。
以下是使用enabledelayedexpansion
的示例:
@echo off
setlocal enabledelayedexpansion
set name=John
set greeting=Hello
echo Original name: %name%
echo Original greeting: %greeting%
echo.
set name=Mike
echo Updated name: %name%
echo Original greeting: %greeting%
echo.
set greeting=Goodbye
echo Updated name: %name%
echo Updated greeting: %greeting%
echo.
set /a count=5
echo Count before loop: %count%
echo.
for /l %%i in (1,1,3) do (
echo Inside loop, iteration %%i
set /a count+=1
echo Updated count: !count!
echo.
)
echo Outside loop, count: %count%
在这个示例中,我们先设置了两个变量name
和greeting
,并给它们分别赋予了初始值John
和Hello
。然后,使用setlocal enabledelayedexpansion
启用了延迟的变量扩展。
在接下来的代码中,我们可以通过使用!
字符来引用延迟变量,而不是%
字符。
首先,我们输出了原始的name
和greeting
的值。
然后,我们修改了name
的值为Mike
,并输出了更新后的name
和原始的greeting
的值。
接下来,我们修改了greeting
的值为Goodbye
,并输出了更新后的name
和greeting
的值。
然后,我们创建了一个变量count
并将其初始值设置为5。在循环中,我们使用for /l
命令执行3次迭代,并在每次迭代中更新count
的值。
在循环内部,我们输出了迭代的当前值,并使用set /a
命令递增count
的值。注意,对于延迟的变量扩展,我们使用!
字符来引用变量。
最后,我们在循环之外输出了count
的最终值。
请注意,在启用了延迟的变量扩展之后,可以在脚本中的任何位置使用延迟变量引用,而不仅仅是在循环中。