标题: [其他] 批处理Call :Label 约等于“函数” [打印本页]
作者: canyuexiaolang 时间: 2010-8-26 13:32 标题: 批处理Call :Label 约等于“函数”
批处理的Call abel,也就是用call来调用某个标签,我们可以把它理解成函数的方式
其实说是函数,也是不太标准的罢了,类似的。
不过有了这个所谓的“函数”,就可以减缩代码的体积。也算是很有用处的了。
call :label
相信这个大家都很熟悉吧?调用某个标签,这个就是我们的“函数”的调用方法了。
多说无益,还是举个例子吧
获取字符串的 “函数”- :StrLen
- Setlocal EnableDelayedExpansion
- Set "Str=%1"&Set "StrLen=0"
- If "%Str%"=="" Echo 字符串长度为0&Goto :eof
- :Next
- Set /a StrLen+=1
- For %%i in ("%StrLen%") do if not "!Str:~%%i,1!"=="" goto Next
- Echo 字符串长度为%StrLen%
- Goto :eof
复制代码
把这段代码放到文件最后,再加点代码,组成一个调用“函数”的批处理程序。- @echo off
- Set /p Input=请输入字符串:
- Call :StrLen %Input%
- Pause
- Exit
- ::---------------------StrLen“函数”-----------------------------
- :StrLen
- Setlocal EnableDelayedExpansion
- Set "Str=%1"&Set "StrLen=0"
- If "%Str%"=="" Echo 字符串长度为0&Goto :eof
- :Next
- Set /a StrLen+=1
- For %%i in ("%StrLen%") do if not "!Str:~%%i,1!"=="" goto Next
- Echo 字符串长度为%StrLen%
- Goto :eof
复制代码
当然,纠错功能,还有特殊字符暂不讨论
上边只是Strlen函数的关键代码罢了,
完整的“函数”当然是要有纠错功能的嘛...
其实,把Call :Label Date 当作函数来看,不仅仅会便于理解,
多次调用还可以在代码上减小体积。
----------------------------------------------------------------------------------------------
以上仅仅代表个人观点。如有错误或者误人子弟之类的,就赶紧提醒哈。
反正我是这么理解的,觉得这样容易理解,就说给大家。
如果有什么错误还请大家谅解了...
[ 本帖最后由 yslyxqysl 于 2010-8-26 13:53 编辑 ]
作者: sgaizxt001 时间: 2010-8-26 21:28
我的理解是“函数”是一段封装的代码,可以直接使用,使用时需要键入一个或多个参数,并会产生一个或多个返回值。
作者: sleepinglord 时间: 2010-8-27 15:03
lz的做法确实在很大程度上可以增强代码的结构化程度和可读性。但是由于:label的代码只能在当前批处理里用,所以只是“私有”函数。
要弄公有的,另写一个批处理就得了。
作者: zcydez 时间: 2010-8-27 20:48
原帖由 canyuexiaolang 于 2010-8-26 13:32 发表
批处理的Call abel,也就是用call来调用某个标签,我们可以把它理解成函数的方式
其实说是函数,也是不太标准的罢了,类似的。
不过有了这个所谓的“函数”,就可以减缩代码的体积。也算是很有用处的了。
call ...
判断长度是我的啊~
http://www.bathome.net/thread-9020-1-1.html
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |