和其它编程语言相比,dos批处理功能显得相对简单,所以,要想实现比较复杂的功能,就得充分运用各种技巧,变量嵌套与命令嵌套就是此类技巧之一。
先复习一下前面的“字符串截取”的关键内容:
**********************************************
截取功能统一语法格式为:%a:~[m[,n]]%
**********************************************
方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)。
百分号如果需要当成单一字符,必须写成%%
以上是dos变量处理的通用格式,如果其中的m、n为变量,那么这种情况就是变量嵌套了。
比如设变量word为“abcdefghij”,变量num为“123456789”
%word:~4,1%为e,其中4可以从变量num中取值,即%num:~3,1%,写成组合形式如下:
%word:~%num:~3,1%,1% 经测试这种写法不能正确执行,写成%word:~(%num:~3,1%),1%同样不行,那么,怎么实现这种变量嵌套呢?这就必须结合命令嵌套。
什么是命令嵌套呢?简单的说,首先用一条dos命令生成一个字符串,而这个字符串是另一条dos命令,用call语句调用字符串将其执行,从而得到最终结果。
例:用call语句实现命令嵌套
@echo off
set str1=aaa echo ok bbb
echo 初始字符串:%str1%
echo 生成命令字符串如下:
echo %str1:~4,7%
echo 运行命令字符串生成最终结果为:
call %str1:~4,7%
pause
运行显示:
初始字符串:aaa echo ok bbb
生成命令字符串如下:
echo ok
运行命令字符串生成最终结果为:
ok