【批处理DOS-CMD命令-汇总和小结】-变量嵌套和命令嵌套

参考来源:

DOS:变量嵌套和命令嵌套 - 阿飞同学 - 博客园

bat脚本的基本命令语法 - 整合侠 - 博客园 

一、什么是变量嵌套、命令嵌套?

1.1 介绍一下字符串截取的知识

对于字符串变量A,要截取它的片段,语法是【A1=%A:~m,n%】。

例如对于字符串变量A=reurabgrien,执行命令【set A1=%A:~3,2%】后,A1就等于【ra】。

当m和n都是正数时,m指向起始字符(也可以理解成从默认的第0个字符偏移的值),n是截取的字符数量(默认是截取全部)。

1.2 什么是变量嵌套和命令嵌套?

上面讲的【%A:~m,n%】是字符串截取的基本形式,m和n是用常量去表示的,那么它们可不可以用变量去表示呢?也即实现「变量嵌套」呢?

答案是可以的,「变量嵌套」需要用到「命令嵌套」才能实现。

「变量嵌套」是最终实现的效果,而「命令嵌套」是实现这种效果的手段方法。

具体来说「命令嵌套」就是有层次地嵌套多个命令,而实现「变量嵌套」的「命令嵌套」方式就是嵌套call命令。

二、嵌套CALL命令的实现细则(只研究二层和三层)

(1)最里面的一层变量用一对百分号包裹。

(2)除非最里面,不然不管哪一层都必须用偶数对百分号。

比如下面这个示例,当有二层嵌套时,第二层用3对百分号,就出错了。

 (3)第二层可以用两对或者四对进行包裹。

以二层嵌套为例,当第二层用6对百分号时,就会输出「echo关闭」;而进一步调至8层、10层也会出这种类型的错误。

(4)第三层的百分号对数必须是第二层的两倍。

如果第二层是两对,那么第三层必须是四对,不然就会出错。

如果第二层是四对,那么第三层必须是八对,不然就会报错 

 (5)嵌套两层就减一、嵌套三层就加一。

如果是嵌套两层,而第二层是两(三)对百分号,call的数量必须大于或等于1(2),也就是说call只能多不能少。

如果是嵌套三层,而第二层是两(三)对百分号,call的数量必须大于或等于2(3),也就是说call只能多不能少。

看下面的案例,即便是6个call,也是正确地执行。

(6)更多层的情况,我没有研究,不过可以肯定的是大部分的场景3层已经完全够了!

三、嵌套call命令的案例

在bat文件中执行下面的代码。

@echo off
set num=AmyAmy 2006 MP.CSDN.net
set a=123245
set b=87754321
echo.
echo a=%a% b=%b% num=%num%
set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
call set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
call call set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
call call call set result=%%%%%%%%num:~%%%%b:~%a:~3,1%,1%%%%,4%%%%%%%%
echo %result%
echo.
pause

结果如下。

我们可以看出,一共用call命令嵌套了三次,分别递增地用了1-3个call命令。

百分号的数量关系是正确的,set的右边语法完全没问题。

相应的,call越多,右边的变量被解析出来的层数也会越多。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值