详细介绍

  1. setlocal:

    • setlocal 命令用于启动本地环境变量设置。这意味着在其后的命令中对环境变量的修改仅在当前脚本或批处理文件中有效,不会影响到调用该脚本或批处理文件的父进程。
  2. enabledelayedexpansion:

    • enabledelayedexpansionsetlocal 的一个选项,用于启用延迟环境变量扩展。
    • 延迟环境变量扩展允许在脚本执行过程中动态地获取和更新环境变量的值。例如:延迟环境变量扩展允许在for循环或其他需要动态评估环境变量的场景中使用 !variable! 语法来访问变量的值,而不是使用 %variable% 语法。这在处理循环或需要多次更新变量值的场景中非常有用。

应用案例

假设需要在一个批处理脚本中处理一个包含多个元素的列表,并对每个元素进行一些操作。使用延迟环境变量扩展可以方便地实现这一需求。

示例脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal enabledelayedexpansion

set "list=apple banana cherry"

echo Before processing:
for %%i in (%list%) do (
echo %%i
)

echo Processing each element:
for %%i in (%list%) do (
set "element=%%i"
set "element=!element:a=A!"
echo !element!
)

endlocal

解释

  1. 启用延迟环境变量扩展:

    1
    setlocal enabledelayedexpansion
  2. 定义列表:

    1
    set "list=apple banana cherry"
  3. 处理前输出列表元素:

    1
    2
    3
    4
    echo Before processing:
    for %%i in (%list%) do (
    echo %%i
    )
  4. 处理每个元素:

    1
    2
    3
    4
    5
    6
    echo Processing each element:
    for %%i in (%list%) do (
    set "element=%%i"
    set "element=!element:a=A!"
    echo !element!
    )
    • 在循环中,使用 set "element=%%i" 将当前元素赋值给 element 变量。
    • 使用 set "element=!element:a=A!"element 变量中的小写 a 替换为大写 A
    • 使用 echo !element! 输出处理后的元素。
  5. 结束本地环境变量设置:

    1
    endlocal

输出结果

1
2
3
4
5
6
7
8
Before processing:
apple
banana
cherry
Processing each element:
ApplA
bAnAnA
chAry

参考链接:https://blog.csdn.net/qq_52964132/article/details/140573911