[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

评分人数

2楼的兄弟,你能举个例子:用start把一个批文件里的变量值传到另一个批处理中??我觉的start仅仅用来启动文件。
call和goto的区别除了您说的,写法上也有区别的

TOP

1、是的,start是一个新的进程中执行的,也是能传递变量值到外部批处理上。
2、另一点call和goto的区别,二楼的兄弟说的不对:“call和goto的区别在于call可以用goto :eof回来”。我的理解是call之后,就执行到指定标签上并往后执行到未尾,然后再回到call句之后,是自然回来的,而非goto:eof回来的。goto:eof的:eof是默认的标签,不用定义,此句是直到最后并结束批文件。
@echo off
set /a a=%random%%%10
echo %a%
pause>nul
if %a% geq 5 (call :run2) else call :run1
goto :eof
:run1
echo 111111111
goto :ex
pause>nul
:run2
echo 222222222
:ex
pause>nul

TOP

6楼的兄弟理解透彻,我向您学习
对于start,概况二句话:“不同进程不能传值”,“相同进程单向传值,老子传儿子,非儿子传老子“
对于call,“同一进程,变量互通”

TOP

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

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

返回列表