bat goto 还是 call

  1. goto

    • 说明

      • goto指令指定程序下一步执行的位置;
      • C语言的goto差不多; 因为bat没有函数的概念, 可以在整个bat文件中任意跳转;
      • label的定义和C语言略有差异;
    • 案例

      int main() {
       int a = 0;
       label:
         if (a < 10) {
           ++a;
           goto label;
         }
       return 0;
      }
      
      set /a a=0
      :label
      
      if %a% lss 10 (
         set /a a+=1
         goto :label
      )
      
      echo %a%
      
      • 上面两个都差不多, 只是定义和调用的略有差异;
    • 参考

    • 补充

      • goto :EOFreturn类似;即推出当前程序;
      • label定义是一行都是, 可以包含空格, 但是不能包括;=之类的;
      • label的定义尽量避免二义性;可以前面加空格, :只能一个, 多了就变成注释了.
      • goto结合if可以实现bat没有的while循环;
      • goto不仅仅往回跳,也可以往下跳;
  2. call

    • 简介

      • call调用其他程序;或指令; 其后的被当作是新的环境中执行;
      • 类比函数调用;
      • bat和汇编的执行很像;

    • 格式

      • call [drive:][path]<filename> [<batchparameters>] [:<label> [<arguments>]]
      • [drive:][path]<filename>文件名, 指调用某个bat文件.batchparameters表示输入参数
      • :<label>标记点, 表示开启一个函数,从这个点开始执行;当然也会继承当前的环境变量;
      • [drive:][path]<filename> 的优先级大于[:<label> [<arguments>]].
    • 注意

      • call :label可以看成是函数调用, 创建新的执行环境, 新的环境的变量之类的都会继承当前环境;执行结束后恢复之前的环境;
      • call 不支持| > <之类的重定向;
      • 递归: 支持递归, 但是要注意死循环;

      • call 后面可以和指令; 比如call set /a "a+=1", 或者是call echo good.

    • 案例

      call :function_label
      
      :function_label
      setlocal
      
      echo good
      
      endlocal && exit /b 0
      
      • 这个的执行结果是;
      good
      good
      [Finished in 336ms]
      
      • 原因是从上往下执行, call之后, 继续往下执行;
      call :function_label
      exit /b 0
      
      :function_label
      setlocal
      
      echo good
      
      endlocal && exit /b 0
      
      • 所以需要这种; 执行完推出当前环境;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值