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

[文本处理] [已解决]批处理call命令调用子程序,一定要在子程序最后加goto:eof

我参考我们论坛以前的帖子,写了一个可以统计一个文本文件中各字符串出现频率的批处理。
但运行结果很奇怪!
上代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. set /p d=请把待统计的文本文件拖进来:
  3. call :test
  4. for /f "tokens=1,* delims=_=" %%i in ('set _') do echo %%i出现的次数为:%%j
  5. pause>nul
  6. :test
  7. for /f "delims=" %%l in (%d%) do (
  8. set str=%%l
  9. call :calc
  10. )
  11. :calc
  12. for /l %%i in (0 1 100) do (
  13.     set "var=!str:~%%i,1!"
  14.      echo !var!
  15.     if "!var!"=="" goto :eof
  16.     set /a _!var!+=1
  17. )
复制代码
假如有一个文本文件aad.txt
内容:
123123
qwe



运行后发现:文本最后一行为什们被计数了两遍。。。。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

在第7行和第14行下面分别加一句:
goto :eof
2

评分人数

TOP

本帖最后由 有理想的猪 于 2015-10-1 11:02 编辑

先谢谢2楼了。

如果有和我一样不懂的菜鸟,可以参考这篇博客:http://blog.163.com/hlz_2599/blog/static/14237847420111015103529478/

在本例中,在执行完最后一行文本统计后,若14行后面没有goto :eof,就会再次进入calc,也就是最后一行文本会被计数两遍。。。。


在用 call 调用子程序时,在子程序的最后一定要加上 goto :eof 让它返回到 call 那里,不然,批处理会继续执行下去,也就达不到实际的效果了

注:如果子程序的下面没有代码了,那加不加都是一样的

TOP

也可以用exit /b,执行效果类似goto :eof

TOP

返回列表