位置: 编程技术 - 正文

批处理技术内幕 ECHO命令介绍(什么是批处理模式)

编辑:rootadmin
众所周知,如果echo后面跟一个环境变量,但是该变量却为空时,相当于不加任何参数的echo,即输出当前echo是on还是off。很多文章或者教程给出的解决方案都是在echo后面加一个点号echo.,这样就会输出空行。 pause据我所知,用echo输出空行至少有十种方法: 这十种方法可以分为三组,每组的效率依次递减。可悲的是,那些被奉为经典的教程给出的却是效率最低那组中的echo. echo.不仅效率低下,而且还容易引发错误: 我知道你很难接受,但事实的确如此。 第一组中echo后面的=,;都是批处理中的分隔符,所以CMD可以正确地解析出echo命令,并把=,;作为echo命令的参数。是的,你没有看错,分隔符并不是用来分隔命令与参数,它们通常是参数的一部分。既然是参数,那么为什么不会被输出?那是因为echo命令直接跳过了参数的第一个字符,从第二个字符开始输出,而第二个字符是NUL,所以输出了空行。 你可能又要问,那为什么用空格做分隔符却不能输出空行呢?那是因为在输出之前,CMD要检查echo命令的参数是不是on或者off,或者参数为空:首先跳过所有空白字符,如果跳过之后字符串就结束了,那么就认为没有加参数,输出echo是on还是off;如果字符串没有结束,就调用wcsnicmp函数来判断剩下的字符串是否为on或者off,进而修改echo的状态。 因此加上很多空格也是一样的效果: 而对于第二和第三组,事情就没那么简单了,由于echo后面跟的并不是分隔符,所以解析之后会被当成一个整体,而echo+ echo/等等显然又不是内部命令,CMD会把它们当做外部命令进行搜索。嗯,你知道,搜索是很花时间的,这就是为什么它们的效率低于第一组。 可惜的是,CMD花了很大力气搜索,却仍然找不到这样的外部命令,这时候它会尝试着修复(Fix)命令,看看命令中是否有某些字符(如图):

可以看到,CMD对:.的处理跟+[]/不太一样,如果是+[]/,CMD会直接把它们从命令中删除并且添加到原有参数的前面;而如果是:.并且CMD拓展是开启的话,那么会多调用一次GetFileAttributes函数获取文件属性,多调用一次函数自然会多花一些时间,所以第三组的效率又稍稍比第二组的低些。

再来解释一下为什么echo.有时候会引起错误。文件名中是不能出现:.的,理论上GetFileAttributes函数都应该返回-1(INVALID_FILE_ATTRIBUTES),然而事实却不是如此,我也不知道这算不算GetFileAttributes函数的BUG: 如果你测试一下上面的C程序,就会发现echo.那行返回的不是-1。 如果GetFileAttributes函数返回的不是-1(一般表示文件不存在),也不是0×(表示文件是文件夹),那么命令还是会保持原来的样子,当成外部命令运行。 ‘echo.' is not recognized as an internal or external command, operable program or batch file. 关闭了CMD拓展,没有问题。 echo是文件夹而不是文件,没有问题。 最后总结一下吧,在大部分情况下,你都应该使用第一组的echo, echo; echo=来进行输出,它们的效率跟echo (空格)是一样的,并且可以用来输出on或者off,在变量为空时还能输出空行。 但是echo, echo; echo=却不能输出以/?开头的行,如果你需要,可以使用第二组的echo+ echo/ echo[ echo],它们的效率低一些,但能保证原样输出。 我不建议你使用第三组的echo: echo. echo,如果你仍然要像垃圾教程里面那样用,我也没有办法。作者: Demon 链接:

推荐整理分享批处理技术内幕 ECHO命令介绍(什么是批处理模式),希望有所帮助,仅作参考,欢迎阅读内容。

批处理技术内幕 ECHO命令介绍(什么是批处理模式)

文章相关热门搜索词:批处理是什么意思,批处理技术有哪些,什么是批处理模式,批处理是什么,批处理的好处,批处理的好处,批处理模式的例子,批处理模式的例子,内容如对您有帮助,希望把文章链接给更多的朋友!

win/winXP 停止打印的bat @ECHO请先关闭打印机电源@ECHOOFFPAUSENETSTOPSPOOLERDELC:WINDOWSsystemspoolPRINTERS*.*/QNETSTARTSPOOLER

ARP本机绑定的bat代码 @echooffifexistipconfig.txtdelipconfig.txtipconfig/allipconfig.txtifexistphyaddr.txtdelphyaddr.txtfind"PhysicalAddress"ipconfig.txtphyaddr.txtfor/f"skip=2tokens="%%Min(phyaddr.txt)dosetMac=%%Mifexis

dos命令for用法详解 for帮助文档对一组文件中的每一个文件执行某个特定命令。FOR%variableIN(set)DOcommand[command-parameters]%variable指定一个单一字母可替换的参数。(set)指定一个或

标签: 什么是批处理模式

本文链接地址:https://www.jiuchutong.com/biancheng/375017.html 转载请保留说明!

上一篇:cmd下在win上做vpn的命令分享

下一篇:win2000/winXP 停止打印的bat(xp系统explorer停止工作)

  • 缴纳增值税影响损益吗
  • 建筑业的增值税税率是多少
  • 餐具报损表格样板
  • 年前一个月工资年后发
  • 费用计入什么会计科目
  • 开办费的帐务处理
  • 附加税计税依据文件
  • 2019年1月份到现在几个月了
  • 土地转让交哪些税种
  • 经济合同
  • 长期股权投资的交易费用计入哪里
  • 公司买车付首付款个人还贷怎么做会计分录
  • 成本暂估跨年度要怎么处理?
  • 免抵退分录怎么做
  • 发票已抵扣是什么意思
  • 代增值税专用发票网上申请
  • 出租房屋的房产税怎么算
  • 税号里面字母是大写吗
  • 案例分析个人心得体会
  • 同一控制下股权转让印花税
  • 金税盘用户管理是灰色不能点击
  • 资金占用费如何开票
  • 收到财产保险赔款会计分录
  • 重点税源财务指标有哪些
  • 行政事业单位的固定资产不计提折旧
  • 电梯维保公司缴税标准
  • 上月没交社保本人能交吗
  • 其他现代服务包括哪些税目
  • 以前年度的费用可以入在当年吗?
  • 收到押金缴国库费怎么办
  • 转出未交增值税借方余额表示什么
  • 商业企业低值易耗品科目核算的内容
  • php常用的设计模式在开发中的实例
  • 增值税发票进项抵扣怎么操作
  • css加载是异步的吗
  • 深度学习参数初始化(二)Kaiming初始化 含代码
  • 个人代人开普票要交几个点税
  • 外管证预缴税款怎么做分录
  • 进口形式发票能证明商品是进口的吗
  • C++ 使用dll路径不在当前路径时如何调用
  • vue3父子组件通信
  • 如何修改php网页内容
  • MySQL发生系统错误2和5
  • 免征增值税和增值税免税
  • 公司两个股东变更为一个股东,需要交税么
  • 房地产企业土地增值税清算
  • 企业所得税年度纳税申报表A类怎么填
  • 债务抵销的条件
  • 蓝字发票作废流程视频
  • 货物赔偿款计入什么会计科目
  • 广告制作需要交文化事业建设税
  • 预收账款变成了什么
  • 生产配合销售还是销售配合生产
  • 本期应补退税额是什么意思
  • 税控盘费用抵扣怎么申报什么表怎么说什么表怎么填报
  • 收不回来的其他应收账款如何处理?
  • 发票盖发票专用章
  • sql server多行添加
  • 微信公众平台在哪里打开
  • Win10 64位正式版系统安装方法全过程图解(U大师)
  • 电脑百度搜索
  • Linux上PPTP VPN的一键安装以及设置开机启动的方法
  • linux中find命令用法
  • jquery手机号码正则表达式
  • ftp自动上传文件怎么关闭
  • 获取nodejs命令行信息
  • react jss
  • ajax multipart/form-data
  • nodemcu web
  • 浅析python中SQLAlchemy排序的一个坑
  • node stream(流)有哪些?
  • 阿里巴巴技术文档翻译工资
  • js弹出div出现遮罩层
  • 实现断点续传的工具软件
  • 土地重置成本价
  • 投诉10080 48小时都没有回复
  • 税务局网上缴税
  • 个人所得税税前扣除是什么意思
  • 86年的2020年是多少岁
  • 金税盘和uk
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设