标签:
杂谈 |
分类: 批处理 |
一,为什么要使用变量嵌套?
二,批处理变量的种类
12a=###
!a=$$$
a=aaa
echo;%12a%
得到结果为:第一个参量+2a
echo;%!a%!
得到结果为:$$$
2,
%var%:
(echo %kh%&pause
echo bb
)复制代码因为%kh%扩展了,其值中的 ")"
与前面的 "("
形成了一组代码,其实只读取了一行,
例如: for /f "tokens=1,2,3" %%a in ("aa ab ac") do (
)复制代码4,!var!:
为什么要这么认为呢?
这也是变量嵌套扩展的一种形式
三、只有了解变量扩展的优先级,才可能理解变量嵌套的用法。
*** 注意:要开启变量延迟,否则!var!变量无从谈起
***
只要%1或%var%扩展的值中含有或和旁边的字符组合后含有:!var!,!var:n=m!,!var:~2,2!
等形式
就会再次进行!号变量的扩展
set aa=bb
set abb=##
echo 程序文件名:%0
echo 嵌套扩展:!a%aa%!
pause复制代码2,先%1或%var% 再 for ()%a
只要%1或%var%扩展后的值里面,含有有效的for
()变量%a的话,该值中的%a
会再次得到for()变量扩展
for %#% in (aa bb cc) do (echo;%#%)
pause复制代码3,先for()%a 再!var!
只要for()%a扩展的值中含有或和旁边的字符组合后含有:!var!,!var:n=m!,!var:~2,2!
等形式
就会再次进行!号变量的扩展,这也就是为什么开启了变量延迟后,会丢失!号的原因。
set #bb=$b
set #cc=$c
for %%a in (aa bb cc) do (echo;%%a : !#%%a!)
pause复制代码4,先%1或%var% 再 for
()%a
也就是第2+第3种用法的
set #=%%a
set aaa=##a
set abb=##b
set acc=##c
for %#% in (aa bb cc) do (echo %%a : a%#% : !a%#%!)
pause复制代码5,多级嵌套:先%1或%var% 再 for
()%a
主要是for ()%a 和!var!间的循环嵌套,看例子: for %%a
in (aaa_$a bbb_$b ccc_$c) do (
for /f "tokens=1,2 delims=_" %%b in ("!str!") do
(
)
)
set $