【WINDOWS / DOS 批处理】嵌套变量如何(延迟)展开

发布于:2022-11-06 ⋅ 阅读:(833) ⋅ 点赞:(0)

什么是变量扩展与变量延迟扩展

变量(延迟)展开的小技巧

嵌套变量如何(延迟)展开

call命令的二次变量展开特性

我们知道:在CMD.EXE的变量延迟展开模式下,可以使用一对“%”来获取变量展开的值,可以使用一对“!”来获取变量延迟展开的值。在CMD.EXE的变量非延迟展开模式下,可以使用一对“%”来获取变量展开的值。

那么,嵌套变量如何(延迟)展开呢?

【嵌套变量如何展开】 

变量(假定其名称为 VAR)展开的顺序是从左到右依次进行的,步骤分为两步:
第一步:

  • 当百分号“%”是偶数时(只按VAR变量左边的百分号数目计算),VAR变量将不会被展开。VAR变量右边的百分号数目如果是奇数,则减一,如果是偶数,则不变。
  • 当百分号是奇数时(只按VAR变量左边的百分号数目计算),最里层的“%VAR%”将被展开为它的值,此时VAR变量左边的百分号数目将少了一个(只按VAR变量左边的百分号数目计算)。VAR变量右边的百分号数目如果是奇数,则减一,如果是偶数,则减二。

第二步:第一步完成后,百分号就都是偶数了。好了,现在把百分号数目的一半脱掉,剩下的就是结果了。

【注意】在批处理脚本中,单个%会被展开为空,"%%"会被展开为%

        示例

::demo.bat
@echo off
set "a=ok"
echo %%%%%a%%%%%

        运行 

C:\>demo.bat
%%ok%%

C:\>

        解析
第一步,由于百分号有5个是奇数,因此最里层的%a%被其值展开,现在变为%%%%b%%%%”;
第二步,将百分号脱去一半,就变为“%%b%%”。

        示例

::demo.bat
@echo off
set "a=ok"

::  a变量左边:%的数目是偶数
echo %%%%a%%%%%

:: a变量左边:%的数目是奇数
echo %%%a%%%%%

:: a变量左边:%的数目是奇数
echo %%%a%%%%

        运行 

C:\>c.bat
%%a%%
%ok%%
%ok%

C:\>

【嵌套变量如何延迟展开】

变量(假定其名称为 VAR)延迟展开的顺序是从变量(VAR)向两边展开的,步骤分为两步:

第一步:先展开 !VAR!

第二步:把多余的!都除掉

【注意】在批处理脚本中,单个!会被展开为空,"!!"不会被展开为!

        示例

::demo.bat
@echo off
setlocal enabledelayedexpansion
set "myTitle=one"
set "myBook=two"
echo !!myTitle!!!!!myBook!!!!!
echo !!myTitle!!!
endlocal

        运行 

C:\>demo
onetwo
one

C:\>

写作不易,如果本文帮到您,请您 “在下面一圈三连”。 


网站公告

今日签到

点亮在社区的每一天
去签到