我们知道:在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:\>
写作不易,如果本文帮到您,请您 “在下面一圈三连”。