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

[原创] 批处理中的call与start的个人学习心得

1、call用来调用执行另一个bat或者cmd文件(当然也可执行其它格式的可执行文件),
start用来调用执行其他格式的可执行文件(exe,com,vbs...)。
2、call具有goto的功能,在程序中实现灵活跳转,而start则不具有这种功能。以下
是我试验用的程序段。
:begin
@echo off
set /a a=%random%%%10
echo %a%
pause>nul
if %a% geq 5 (call :run2) else call :run1
:run1
echo 111111111
call :ex
:run2
echo 222222222
:ex
call :begin
3、call具有传递变量到外部的批处理上并能回传,而start则不具备回传功能(可以将call换成start试
试)
=========
::b.bat如下:
@echo off
for /l %%i in (1,1,3) do call b.bat %%i
pause
==============
::b.bat如下:
@echo off
echo number is %1


以上是我的学习心得,我希望大家也把心得写成小文章, 发表在上面,一起提高

[ 本帖最后由 taojunyi 于 2009-3-3 20:21 编辑 ]
1

评分人数

回复 23# 小程936


    执行速度方面,有什么数据做过对比吗,能否给大家分享一下?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

start用来执行任何格式的文件。

start可以做到,只是你没有pause住。

call和goto的区别在于call可以 ...
yslyxqysl 发表于 2009-1-24 13:39



start /w 执行第三方程序的效果特别好(等待程序结束后继续)
为什么要用goto :eof
exit /b 难道不是秒杀吗?
不论是代码长度,易记程度,执行速度,exit /b都完胜。
https://docs.microsoft.com/zh-cn ... 0/cc772743(v=ws.10)

TOP

call回传和设置同一变量,start开启新进程环境
我就是我,不一样的烟火!

TOP

学习

TOP

回复 13# hunrybecky


   start /b /wait这样行不行?

TOP

具体可以参考

一是调用范围不同:CALL主要用来进行批处理的内部调用如CALLEND和一些DOS命令的调用如CAL ...
hunrybecky 发表于 2009-2-26 22:59

归纳的很全面呢

TOP

有没有讲解start各个参数的教程,有哪位同胞知道或者自己弄透了的,能否指点一下,谢谢咯!

TOP

个人觉得还是前面13楼概括的挺好的

TOP

不错    学习中     !!!!!!!!!!!

TOP

楼上的只要不ctrl+c就会一直循环的吧

TOP

:begin
@echo off
set /a a=%random%%%10
echo %a%
pause>nul
if %a% geq 5 (call :run2) else call :run1
:run1
echo 111111111
call :ex
:run2
echo 222222222
:ex
call :begin



不知道这个批处理能不能无循环的运行下去啊

TOP

具体可以参考
http://xbdsoft.kmip.net/article/study/28.htm
一是调用范围不同:CALL主要用来进行批处理的内部调用如CALLEND和一些DOS命令的调用如CALL SET TEST=2,但也可以调用其他可执行文件,而START则不能进行内部调用,但其可以执行基本上所有的外部程序,还可以执行SHELL,如打开文件夹START "" "%WINDIR%",安装网络打印机START "" "\\IP\Printer",同时需要注意有无START调用外部程序的区别;

      二是调用方式不同:CALL实际上调用,所以在CALL另一个批处理时是在同一窗体进程里执行,而START是执行,所以在执行另外一个批处理时是在不同的窗体进程里执行,也就是说在新的进程里执行,虽然START可以加入B参数,但其结果却完全不同.如我们使用CALL SET TEST=2和START /B SET TEST=2看似执行的结果相同,但是我们发现后者有两个进程,而且在窗体里要执行两次EXIT才能退出,所以当我们使用START来执行一个批处理后最好在被调用的批处理中也加一个EXIT,否则无法退出被调用的批处理的DOS窗体,但是使用CALL调用时如果在被调用的批处理中存在EXIT则会直接结束原始和别调用的批处理程序,这是一个非常严重的问题,建议在被调用的程序中使用goto:eof来取代EXIT;.

     三是调用结果不同:CALL调用不仅可以把参数或变量传给被调用的批处理,而且被调用的批处理也可以设置参数或变量以便回传,而START只能把参数或变量传给被调用的批处理,却不能回传参数或变量,这一点实际上是第二点的延伸.至于此我们还必须注意使用CALL调用其他批处理中我们使用GOTO的时候建议使用不同的节来跳转,否则可能跳转到原批处理中而不能完整的执行被调用的批处理.
1

评分人数

TOP

今日有所收获,谢谢大家,对于call和goto:eof,改了下之后更简捷
@echo off
set /a a=%random%%%10
echo %a%
pause
if %a% geq 5 (call :run2) else call :run1
goto :eof
:run1
echo 小于5
pause
goto :eof
:run2
echo 大于等于5
pause

TOP

对于start:“不同类型进程不能传值”,“相同类型进程单向传值,父传子“
对于call,“同一进程,变量互通”

TOP

返回列表