诡异的errorlevel

errorlevel值,即是bat中最后的errerno,同$?变量

现象:

但是你会发现再For循环中会失效!!!

原因:

在for循环中或if语句中多条命令都需要获取返回值等情况下,用errorlevel显得无效,第二条命令开始errorlevel的值都不会变。
此处涉及批处理中的变量延迟问题,并不是errorlevel无效,而是对errorlevel变量的引用采用的是没开启变量延迟情况下的百
分号%。

解决方案:

开启变量延迟的设置:setlocal EnableDelayedExpansion,即延迟环境变量扩展,告诉解释器在遇到复合语句的时候,不要
将其作为一条语句同时处理,而是一条一条地去解释。但是这时如果仍然用百分号%来引用变量是不起作用的,必须用感叹
号!,如!errorlevel!。

setlocal enabledelayedexpansion
cmd1
if!errorlevel! == 1 (
cmd2
echo !errorlevel!
)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 命令简介 echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置...
    Elevenstrings阅读 1,022评论 0 2
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,254评论 1 19
  • 一、基础语法: 1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文...
    蒋_Sir阅读 9,238评论 1 4
  • 一、常用批处理内部命令 批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD...
    C1R2阅读 875评论 0 0
  • 1 DOS特殊符号 操作dos命令的脚本后缀是.bat,全称是batch即批处理文件 1.1 屏蔽注释符 1.1....
    上善若泪阅读 1,269评论 0 1