dos/bat脚本 call和start的区别

dos/bat脚本 call和start的区别

简单来说:call的用处是调用另一个批处理程序,并且终止父批处理程序,只有该批处理执行完才会往下走

而start 是另开 一个窗口(/b状态不弹框),并且不终止父批处理程序。

注:start严格来说是新增加一个进程。

call和start的详细用法可以通过call /?和start /?来查询,在这里详细的就不说了,这篇博客主要讲的还是他们之间的区别。

在这里我通过代码的方式来看出他们之间的区别

首先需要一个辅助批处理脚本A,让call 和start分别调用这个脚本。

A脚本如下:

@echo off
title:yzy
set /a a=%1
set /a b=60
set /a var=%a%*%b%

rem ************循环开始
::标签
:continue
echo 倒计时%var%秒!
::批处理延时启动方法
choice /t 1 /d y /n >nul 
set /a var-=1
::跳转
if %var% gtr 0 goto continue
rem ************循环结束
exit

一、call测试脚本:

@echo off
set A=D:\system-jb
pushd %A%
echo start
::调用另一个批处理程序,并且不终止父批处理程序
call  call_bat.bat 1
echo flag
pause
echo end
popd
pause

pause的用处:暂停,相当于一个debugger。

设计原理:1、通过观察,是否打印出flag标志,来判断call在整个bat脚本中执行会不会影响父批处理程序。

                2、通过筛选A脚本的进程来判断它是不是新增加一个进程。

效果如下:

通过效果可以看出call的特性:调用另一个批处理程序,并且终止父批处理程序,只有该批处理执行完才会往下走

二、start测试脚本

@echo off
set A=D:\system-jb
pushd %A%
::另开 一个窗口,并且不终止父批处理程序
echo start
start /B call   call_bat.bat 1
echo flag
pause
echo end
popd
pause

pause的用处:暂停,相当于一个debugger。

设计原理:1、通过观察,是否打印出flag标志,来判断start在整个bat脚本中执行会不会影响父批处理程序。

                2、通过筛选A脚本的进程来判断它是不是新增加一个进程。

效果如下:

通过效果可以看出start的特性:不终止父批处理程序。但是在这里看不出来是否新增新的进程

去掉/B,脚本如下:

@echo off
set A=D:\system-jb
pushd %A%
::另开 一个窗口,并且不终止父批处理程序
echo start
start  call   call_bat.bat 1
echo flag
pause
echo end
popd
pause

效果:

弹出一个新的cmd框,或者通过tasklist 命令观察 cmd.exe 的pid 也可以看出新增了一个进程

发布了95 篇原创文章 · 获赞 180 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/91389811