中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]批处理中的简单递归 上一主题 | 下一主题
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『楼 主』:  [原创]批处理中的简单递归

这里给出3个批处理:

数字输出.bat:
@echo off
echo 升序输出
Call :ShowNumAsc 10
pause
echo 降序输出
Call :ShowNumDesc 10
pause

:ShowNumAsc
if %1 EQU 0 goto :EndShowNum
set /a ShowNum=%1-1
Call :ShowNumAsc %ShowNum%
echo %1
goto :EndShowNum

:ShowNumDesc
if %1 EQU 0 goto :EndShowNum
echo %1
set /a ShowNum=%1-1
Call :ShowNumDesc %ShowNum%
goto :EndShowNum

:EndShowNum
阶乘计算:
@echo off
set Fn=1
set /p var=你要计算几的阶乘呢?
Call :Fn %var%
echo %var%的阶乘为:%Fn%
pause

:Fn
if %1 LEQ 1 goto :EndFn
set /a Fn*=%1
set /a t=%1-1
Call :Fn %t%
:EndFn
Fn:因为Call是没有返回值的,所以这里的递归需要一个全局变量(顺便设置初始值),为了方便和更符合递归调用的格式,取与标签名一致。

文件路径解析:
@echo off
set var="c:\slore\at\bbs.cn-dos.net\batandscript\batfile.cmd"
Call :OutDeep %var%
pause

:OutDeep
echo 全路径:%1
Call :InnerDeep "%~1"
echo 所在路径:%~dp1
echo 文件名:%~nx1
goto :EndDeep

:InnerDeep
set c=%~dp1
if %c:~-1,1%==\ set c=%c:~0,-1%
if /i "%~1"=="%c%" (
    echo 所在驱动器是:%c:~0,1%盘
    goto :EndDeep
)
Call :InnerDeep %c%
echo 现在得到的路径是:%~1
::echo 现在得到的路径是:%~n1
:EndDeep




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-12-21 12:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: