批处理函数递归解惑

参考: https://www.dostips.com/DtTutoFunctions.php#FunctionTutorial.RecursiveFunctions
最近做svn工具发现批处理能用递归很好奇的研究了一下,网上找了几个实例,但自己一写就总是不对,记录一下,主要是对批处理理解不深入

批处理递归主要用setlocal命令来缓存原来的变量 使用endlocal 后再还原原来的变量 达到不相互影响的效果

@echo on
prompt $G
setlocal enabledelayedexpansion
set mystring=1xxxx
set /a sLength=0
call :strLen sLength %mystring%
echo mystring=%mystring% sLength=%sLength%
pause

:strLen
if "%~2" equ "" set lenName=0 & goto :eof rem empty string process
setlocal
set /a lenName=%~1
set str=%~2
if "!str:~%lenName%!" neq "" set /a NextLen=lenName+1  &call :strLen NextLen,%str%
(endlocal &set /a %~1=%NextLen%)
goto :eof

pause
递归完成后再返回来的值 是通过一个专门的变量名来层层传递的
关键句是

(endlocal &set /a %~1=%NextLen%)
&这个运算符不能省 意思是在一行执行

结束当前的块,这样程序恢复上次的变量 
set /a %~1=%NextLen% 相当于把当前结果往上传

这样一层一层往上返回 达到了目的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值