windows批处理学习(call与start)---02

参考:https://www.cnblogs.com/Braveliu/p/5078283.html

一、call命令总结

(1)call命令简介

  语法: call [ [Drive:] [Path] FileName [BatchParameters]] [:label [arguments]]

  参数: [Drive:][Path] FileName  指定要调用的批处理程序的位置和名称。Filename 参数必须是.bat 或 .cmd 扩展名的类型文件。

  BatchParameters 指定批处理程序所需的命令行信息(即参数项)。

  调用另一个批处理程序,并且不终止父批处理程序(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。

  call 命令接受用作跳转目标的标签。如果在脚本或批处理文件外使用call,它将不会在命令行起作用。

(2)call命令应用

test1:   新建两个文本文件,一个命名为call1.bat.

1 echo running in call1

  另一个命名为call2,修改文件类型为bat,用Notepad++打开编辑内容为:

1 @echo off
2 echo start
3 call call1.bat
4 echo running in call2
5 echo end
6 pause

  

注意:call1脚本第一行没有再写@echo off语句。因为call2第一行已经关闭了命令回显状态,当call2调用call1时,此设置同样有效,由此可更深入理解调用。

test2: 调用标签。

1 @echo off
2 call :label
3 echo 1
4 echo 2
5
6 :label
7 echo 3
8 echo 4

  另一个命名为call4

1 @echo off
2 call call3.bat
3 pause

  双击执行call4文件,执行结果如下所示:

test3:调用带参数的批处理

1 echo %1 %2
2 echo %3

  另一个命名为call8,修改文件类型为bat,用Notepad++打开编辑内容为:

1 @echo off
2 call call7.bat hello world !
3 dir c:4 pause

(3)call命令与goto命令的区别

call命令的应用示例2中,我们看到了call命令对跳转标签的调用,注意调用时必须在标签名前加冒号,而goto是直接跟标签名。

同上例,我们再看看goto的执行效果:新建两个文本文件,一个命名为call5

1 @echo off
2 goto label
3 echo 1
4 echo 2
5
6 :label
7 echo 3
8 echo 4

  另一个命名为call6,修改文件类型为bat,用Notepad++打开编辑内容为:

1 @echo off
2 call call5.bat
3 pause

  双击执行call6文件,执行结果如下所示:

二、start命令总结

(1)start命令简介

在打开的命令提示符窗口里,输入start/?-->回车,查看“start”命令的参数和用法说明(注:按任意键可以查看更多后面的内容)示例截图如下:

(2)start命令应用

  test1 :基本应用。打开系统计算器以及记事本。

  新建一个文本文件,命名为start1,修改文件类型为bat,用Notepad++打开编辑内容为:

1 start calc
2 start notepad
3 exit

  执行结果:分别打开计算器和记事本,同时终端一闪而过(因为最后exit)。

(3)start命令与call命令的区别

  start命令应用示例:新建两个文本文件,一个命名为startmain,修改文件类型为bat,用Notepad++打开编辑内容为:

1 @echo off
2 set a=1
3 pause>nul
4 echo start startchild.bat
5 start startchild.bat
6 echo end start
7 pause>nul
8 echo %b%
9 pause>nul

  一个命名为startchild,修改文件类型为bat,用Notepad++打开编辑内容为:

1  @echo off
2 echo %a%
3 set b=20
4 pause>nul

  双击执行startmain.bat,观察其运行结果如下图所示:

  相同的应用,如果改为call命令:新建两个文本文件,一个命名为callmain,修改文件类型为bat,用Notepad++打开编辑内容为:

1 @echo off
2 set a=1
3 pause>nul
4 echo call callchild.bat
5 call callchild.bat
6 echo end call
7 pause>nul
8 echo %b%
9 pause>nul

  一个命名为callchild,修改文件类型为bat,用Notepad++打开编辑内容为:

1  @echo off
2 echo %a%
3 set b=20
4 pause>nul

  双击执行callmain.bat,观察其运行结果如下图所示:

  分析结果:

  应用示例中,在main.bat中定义了变量a,值为1;在child.bat中定义了变量b,值为20。

  main.bat首先执行call child.bat,然后child.bat将执行echo %a%,现在能正常显示1。

  call完之后,main.bat将执行echo %b%,也能正常显示20。

  那么,如果将call改为start,待child.bat执行完再关闭之后,main.bat继续echo %b%,将无法显示变量b的值,而仅相当于执行echo命令,执行结果为:ECHO处于关闭状态。

  call的时候,他们拥有同一个壳cmd.exe,在同一个进程当中,所以他们的变量是互通的。

  start的时候,他们拥有两个壳cmd.exe,但child.bat可以看成是main.bat的子进程,子进程可以读取父进程中的变量(即a的值)。

  总结结论:

  对于start,概况二句话:“不同进程不能传值”,“相同进程单向传值,老子传儿子,非儿子传老子”。

  对于call,“同一进程,变量互通”。

  另外,可以从以下几方面理解start与call命令的区别:

  一是调用范围不同:call主要用来进行批处理的内部调用,如call :pend 和一些dos命令的调用如call set test=2,但也可以调用其他可执行文件,而start则不能进行内部调用,但其可以执行基本上所有的外部程序,还可以执行shell,如打开文件夹start "" "%WINDIR%",安装网络打印机start "" "\\IP\Printer"等等。

  二是调用方式不同: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命令的时候,建议要使用与原批处理中不同的标签名来跳转,否则可能会跳转到原批处理中而不能保证完整的执行被调用批处理中的所有语句。

原文地址:https://www.cnblogs.com/dongzhuangdian/p/8167179.html

时间: 2024-10-09 10:06:27

windows批处理学习(call与start)---02的相关文章

windows批处理学习(字符换操作)---04

转自:https://www.cnblogs.com/DswCnblog/p/5432326.html 1.截取字符串 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符.举例说明其基本功能: @echo off Setlocal enabledelayedexpansion ::CODER BY dsw POWERD BY iBAT set abc=hello world, this string come from bat echo 原字符

windows批处理命令教程

批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们 批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们.使用批 处理文件(也被称为批处理程序或脚本),可以简化日

windows批处理(.bat)

转自http://www.cnblogs.com/shiney/archive/2011/07/04/2097236.html 本文在运行中有一些小小的问题,我修改了一下,将会在稳重标出 批处理文件是无格式的文本 文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们.使用批 处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务.当然我们的这个版

windows批处理(cmd/bat)编程详解

reference: http://blog.csdn.net/bingjie1217/article/details/12947327 http://www.cnblogs.com/doit8791/archive/2012/05/20/2511001.html 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多.cmd文件只有在windo

c# windows 服务学习

用C#做windows服务变得简单对了===按照下面步骤来就行了用C#创建Windows服务(Windows Services)例子服务功能:这个服务在启动和停止时,向一个文本文件中写入一些文字信息. 第一步:创建服务框架 要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定.你可以看到,向导向工程文件中增加WebService1.cs类:其中各属性的含意是: Autolog 是

Windows批处理中获取日期和时间

编写Windows批处理时经常会需要使用到日期和时间作为文件名,所以是非常重要的. 如何获取日期呢?格式:  %date%结果:  2012-07-31 如何获取时间呢?格式:  %time%结果:  10:21:21.68 这是获取的系统标准格式的日期和时间,但是有时候我们需要使用规定的格式,怎么办呢? 格式:   %date:~x,y%以及%time:~x,y%说明:   x是开始位置,y是取得字符数 比如说我要获取完整的日期和时间,格式:   %date:~0,4%%date:~5,2%%

黑 马 程 序 员_视频学习总结<c语言>----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

Windows服务器Pyton辅助运维--02.远程重启IIS服务器

Windows服务器Pyton辅助运维 02.远程重启IIS服务器 开发环境: u  Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u  运维服务器: Python 2.7.8 组件:pywin32(219)  wmi(1.4.9) 工作内容说明: 每次排除故障的时候开发人员都会要求重启Web服务器上的IIS,有很多台IIS服务器需要重启,当然Google知道bat可以搞定这件事,但是本文用python来搞定. 实现过程: 先准备以下几个问题 使用Wind

Windows API 学习指南

1.WindowsAPI开发入门2.Windows数据类型3.Windows数据类型与WindowsAPI函数4.Windows数据结构5.将系统目录信息写入文件6.窗口创建以及消息处理7.使用对话框资源创建窗口8.使用MFC创建对话框窗口9.宽字符10.三种版本11.字符转换12.遍历卷13.驱动器属性14.磁盘容量15.文件操作的四种方法16.文件操作(一)17.文件操作(二)18.目录操作(一)19.目录操作(二)20.目录操作(三)21.文件属性和时间22.内存映射文件23.系统信息(一