[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理Call :Label 约等于“函数”

批处理的Call abel,也就是用call来调用某个标签,我们可以把它理解成函数的方式
其实说是函数,也是不太标准的罢了,类似的。
不过有了这个所谓的“函数”,就可以减缩代码的体积。也算是很有用处的了。
call :label
相信这个大家都很熟悉吧?调用某个标签,这个就是我们的“函数”的调用方法了。
多说无益,还是举个例子吧
获取字符串的 “函数”
  1. :StrLen
  2. Setlocal EnableDelayedExpansion
  3. Set "Str=%1"&Set "StrLen=0"
  4. If "%Str%"=="" Echo 字符串长度为0&Goto :eof
  5. :Next
  6. Set /a StrLen+=1
  7. For %%i in ("%StrLen%") do if not "!Str:~%%i,1!"=="" goto Next
  8. Echo 字符串长度为%StrLen%
  9. Goto :eof
复制代码
把这段代码放到文件最后,再加点代码,组成一个调用“函数”的批处理程序。
  1. @echo off
  2. Set /p Input=请输入字符串:
  3. Call :StrLen %Input%
  4. Pause
  5. Exit
  6. ::---------------------StrLen“函数”-----------------------------
  7. :StrLen
  8. Setlocal EnableDelayedExpansion
  9. Set "Str=%1"&Set "StrLen=0"
  10. If "%Str%"=="" Echo 字符串长度为0&Goto :eof
  11. :Next
  12. Set /a StrLen+=1
  13. For %%i in ("%StrLen%") do if not "!Str:~%%i,1!"=="" goto Next
  14. Echo 字符串长度为%StrLen%
  15. Goto :eof
复制代码
当然,纠错功能,还有特殊字符暂不讨论
上边只是Strlen函数的关键代码罢了,
完整的“函数”当然是要有纠错功能的嘛...

其实,把Call :Label Date 当作函数来看,不仅仅会便于理解,
多次调用还可以在代码上减小体积。
----------------------------------------------------------------------------------------------
以上仅仅代表个人观点。如有错误或者误人子弟之类的,就赶紧提醒哈。
反正我是这么理解的,觉得这样容易理解,就说给大家。
如果有什么错误还请大家谅解了...

[ 本帖最后由 yslyxqysl 于 2010-8-26 13:53 编辑 ]

我的理解是“函数”是一段封装的代码,可以直接使用,使用时需要键入一个或多个参数,并会产生一个或多个返回值。
努力学习,努力挣分

TOP

lz的做法确实在很大程度上可以增强代码的结构化程度和可读性。但是由于:label的代码只能在当前批处理里用,所以只是“私有”函数。

要弄公有的,另写一个批处理就得了。

TOP

原帖由 canyuexiaolang 于 2010-8-26 13:32 发表
批处理的Call abel,也就是用call来调用某个标签,我们可以把它理解成函数的方式
其实说是函数,也是不太标准的罢了,类似的。
不过有了这个所谓的“函数”,就可以减缩代码的体积。也算是很有用处的了。
call  ...

判断长度是我的啊~
http://www.bathome.net/thread-9020-1-1.html

TOP

返回列表