![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 14:01 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » GOTO:EOF新人还不会用的请看这里 |
| 可打印版本 5,511 / 11 |
| 第1楼 YoDe | 发表于 2007-12-09 23:51 |
| 中级用户 发帖 102 积分 224 | |
|
GOTO:EOF新人还不会用的请看这里 本文来自死性不改的网志 http://www.clxp.net.cn 转载请保留此申明!
关于同一批处理使用多个同样的命令,把这个用了多次的批处理改为一个子程序,用 call调用。 具体写法是 goto :eof :一个标记 批处理内容 goto :eof 调用子程序的方法是 call :一个标记 另外要注意,子程序要放到脚本的最后,如果有多个子程序用:标记来划分就可以了。 如果是同一个功能的命令的话,可以放到一个子程序里,如果是不同功能的命令的话要放两个子程序 例1: taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe 此例子视为同一个功能的命令,那么就写 goto :eof :结束程序(这是注释哈,自己随便定义的,这就是那个标记) taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe goto :eof 这就是一段同一个功能的命令并连续执行的子程序。。。 在使用的时候直接用 call :结束程序 来调用此段子程序。 那么另一段功能不同,而且也是一个同一批处理使用多次的命令要组成子程序就要用goto :eof分隔开, 并用:标记,来区分。 例2: 下面这段代码我用了多次 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe 这段代码也用了多次 md c:\1.txt md c:\2.txt md c:\3.txt 但是并不是结束完程序,就开始建立文件,中间还有其他语句,那么把他们改为子程序来调用如何写呢?看下面 goto :eof :结束程序 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe goto :eof(不同功能的子程序要用goto :eof来分隔一下,用:标记来区分。) :建立文件 md c:\1.txt md c:\2.txt md c:\3.txt goto :eof 调用子程序的时候用 call :标记 来使用, 比如 call :结束程序 call :建立文件 为什么两个都是常用的命令,却要用goto :eof 来分隔开呢。。 当然是有原因的了。。因为这两段程序“结束程序”和“建立文件”两个子程序,是在同一个批处理里用了好多次。 但是他们并不是同时使用的,也就是说,并不是结束完程序,就建立文件,而是结束完程序,还有其他内容。然后 又用到建立文件,所以要用goto :eof来分隔一下。 普通的跳转goto 执行跳转是直接 goto 标记 但是子程序调用是 goto :标记 标记前面多了个冒号。。所以要注意。。。 表达的不是很明白,有点晕哈~~ 写个完整的例子看看吧。 对照例1的 ping 192.168.0.1 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe ping 192.168.0.2 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe ping 192.168.0.3 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe exit 批处理的意思就是 ping完192.168.0.1 后,关闭程序1.exe 2.exe 3.exe 、 ping完192.168.0.2 后,关闭程序1.exe 2.exe 3.exe 、 ping完192.168.0.3 后,关闭程序1.exe 2.exe 3.exe 、 退出 那么“关闭程序1.exe 2.exe 3.exe”这段代码在同一程序里用了3次,写这么长,多麻烦。。那么我们给他加进 子程序里去.... ping 192.168.0.1 call :结束程序 ping 192.168.0.2 call :结束程序 ping 192.168.0.3 call :结束程序 exit goto :eof :结束程序 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe goto :eof 使用子程序,和不使用子程序的代码,看起来有没有规范些,清爽些呢? 这只是简单的脚本,如果是一个很麻烦的命令,一个脚本里用了N次,如果每次都写同样的代码,,会很烦的,所以 还是建议大家在同一个批处理使用过多次的命令或语句,就搞成子程序来调用好了。 刚才例2就有点麻烦了。。。写下看看。 ping 192.168.0.1 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe ping 192.168.0.2 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe ping 192.168.0.3 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe ping 192.168.0.4 md c:\1.txt md c:\2.txt md c:\3.txt ping 192.168.0.5 md c:\1.txt md c:\2.txt md c:\3.txt ping 192.168.0.6 md c:\1.txt md c:\2.txt md c:\3.txt exie 批处理的意思就是 ping完192.168.0.1 后,关闭程序1.exe 2.exe 3.exe 、 ping完192.168.0.2 后,关闭程序1.exe 2.exe 3.exe 、 ping完192.168.0.3 后,关闭程序1.exe 2.exe 3.exe 、 ping完192.168.0.4 后,建立名为1 2 3的三个文本 、 ping完192.168.0.5 后,建立名为1 2 3的三个文本 、 ping完192.168.0.6 后,建立名为1 2 3的三个文本 、 退出 这个就看出麻烦来了吧。。。 那好,,把用了N次的命令写进子程序里 ping 192.168.0.1 call :结束程序 ping 192.168.0.2 call :结束程序 ping 192.168.0.3 call :结束程序 ping 192.168.0.4 call :建立文件 ping 192.168.0.5 call :建立文件 ping 192.168.0.6 call :建立文件 exit goto :eof :结束程序 taskkill /f /im 1.exe taskkill /f /im 2.exe taskkill /f /im 3.exe goto :eof :建立文件 md c:\1.txt md c:\2.txt md c:\3.txt goto :eof 我都看懂了蛤 你们不会还不会吧 蛤蛤 终于明白了GOTO:EOF的用法 希望 和我一样迷糊的朋友学会蛤 |
|
| 第2楼 fastslz | 发表于 2007-12-09 23:58 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
| 第3楼 YoDe | 发表于 2007-12-10 04:10 |
| 中级用户 发帖 102 积分 224 | |
|
fastslz
兄干嘛哦 我是发贴给跟我一样的新人的 没有比这帖子更明白的了 呵呵 |
|
| 第4楼 windowsxphao | 发表于 2008-03-05 07:53 |
| 初级用户 发帖 14 积分 25 | |
|
感谢楼主,对我了解goto :eof 是一篇很好的帖子
|
|
| 第5楼 jdshaw | 发表于 2008-07-12 13:28 |
| 新手上路 发帖 6 积分 11 | |
|
好像有没有goto :eof结果都一样的?
|
|
| 第6楼 sparklt | 发表于 2008-07-14 13:32 |
| 初级用户 发帖 15 积分 22 | |
|
又学会了一点:
普通的跳转goto 执行跳转是直接 goto 标记 但是子程序调用是 goto :标记 标记前面多了个冒号。。所以要注意。。。 |
|
| 第7楼 HAT | 发表于 2008-07-14 14:53 |
| 版主 发帖 5,017 积分 9,023 | |
|
to 6楼 所有的跳转最好都使用冒号,以前有人讨论过。
|
|
| 第8楼 dslz666 | 发表于 2008-07-24 15:37 |
| 中级用户 发帖 117 积分 233 | |
Originally posted by jdshaw at 2008-7-12 01:28 PM: 不会吧,有没有goto :eof结果都一样的 我怀疑这位兄弟都没仔细看楼主转来的文章, |
|
| 第9楼 smyhcf | 发表于 2008-07-27 01:55 |
| 新手上路 发帖 7 积分 18 | |
|
看不懂,,跳来跳去.跳晕了..希望LZ能说简单点,照顾一下我们这些新人
|
|
| 第10楼 dos295730797 | 发表于 2011-01-06 11:22 |
| 新手上路 发帖 6 积分 11 来自 河北石家庄 | |
|
呵呵,一步一步来吧兄弟,哪儿不懂就上网查哪儿,沉下心来学习才能学会。
|
|
| 第11楼 ylsmjh | 发表于 2011-01-06 13:02 |
| 新手上路 发帖 1 积分 1 | |
|
没怎么看懂
goto:eof 的功能是, Call子程序后, 返回Call处 |
|
| 第12楼 zaixinxiangnian | 发表于 2011-01-14 22:36 |
| 初级用户 发帖 106 积分 151 来自 河南省 | |
|
是这篇让我学会了GOTO :EOF
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |