目录
dos/bat脚本 call和start的区别
一、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 也可以看出新增了一个进程