设为首页 收藏本站
查看: 1061|回复: 0

[经验分享] Windows 批处理 -- IF-ERRORLEVEL使用方法

[复制链接]

尚未签到

发表于 2018-6-19 12:22:28 | 显示全部楼层 |阅读模式
  From: http://www.iyunv.net/article/7525.htm
  命令解释:
  我们都知道if是命令行下的一个条件判断语句,ERRORLEVEL是它的一个参数,翻译过来就是“错误返回码”的意思,它的作用是判断前一条命令的错误返回值,然后和定义的字符值进行比较,再决定进行什么动作.
  实例1:
  今天远程一个客户,发现他的服务器会不定时自动断开网络,导致客户端连接不了服务端,但是重启服务以后又恢复正常,初步判断可能是由于某个系统服务与winpacp有冲突,建议用户恢复操作系统,他想等晚上再开始操作,今天就只好一直运行个ping,发现timed out就手动重启服务。我记得if可以利用程序的返回值作为判断,就帮他写了这个脚本:
  @echo off
  : p
  ping 61.152.XX.XX
  IF ERRORLEVEL 1 goto aa
  IF ERRORLEVEL 0 goto bb
  :aa
  echo 正在重启软件服务...
  net stop MSSQLSERVER
  net start MSSQLSERVER
  goto p
  :bb
  echo 继续ping中。。。
  goto p
  这段命令的作用是,ping 61.152.XX.XX这个IP,如果ping不通则重启mssql服务,然后继续ping,如果能够ping通,还是继续ping...
  我们都知道if是命令行下的一个条件判断语句,ERRORLEVEL是它的一个参数,翻译过来就是“错误返回码”的意思,它的作用是判断前一条命令的错误返回值,然后和定义的字符值进行比较,再决定进行什么动作。
  格式是这样:
  if ERRORLEVEL nubmer commend
  例:if ERRORLEVEL 1 echo 返回值等于1
  那么大家就要问了,我怎么获取到前一个命令的返回值呢?
  方法很简单,拿ping来说,我们先运行一个ping 127.0.0.1
  运行结果是Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
  这时候我们输入,echo %errorlevel%,就可以看到返回值是0,
  然后我们在ping一个不存在的ip,比如192.192.192.192
  ping命令显示 Request timed out.。
  ok,我们在用echo %errorlevel%查一下返回值是多少。
  现在变成了1。
  你也可以用这个方法来查询其他命令的返回值,比如copy、dir等等。
  当然if ERRORLEVEL对数值的比较方法不仅仅限于等于。在微软的帮助中我们可以看到:
  IF %ERRORLEVEL% LEQ 1 goto okay
  这里的LEQ表示“小于等于”,全部的比较参数如下:
  EQU - 等于
  NEQ - 不等于
  LSS - 小于
  LEQ - 小于或等于
  GTR - 大于
  GEQ - 大于或等于
  如有错误,感谢指正。
  实例2:
  IF-ERRORLEVEL
  建立TEST4.BAT,内容如下:
  @ECHO OFF
  XCOPY C:\AUTOEXEC.BAT D:\
  IF ERRORLEVEL 1 ECHO 文件拷贝失败
  IF ERRORLEVEL 0 ECHO 成功拷贝文件
  然后执行文件:
  C:\>TEST4
  如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。
  IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。
  因此下面的批处理文件是错误的:
  @ECHO OFF
  XCOPY C:\AUTOEXEC.BAT D:\
  IF ERRORLEVEL 0 ECHO 成功拷贝文件
  IF ERRORLEVEL 1 ECHO 未找到拷贝文件
  IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作
  IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作
  IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误
  无论拷贝是否成功,后面的:
  未找到拷贝文件
  用户通过ctrl-c中止拷贝操作
  预置错误阻止文件拷贝操作
  拷贝过程中写盘错误
  都将显示出来。
  以下就是几个常用命令的返回值及其代表的意义:
  backup
  0 备份成功
  1 未找到备份文件
  2 文件共享冲突阻止备份完成
  3 用户用ctrl-c中止备份
  4 由于致命的错误使备份操作中止
  diskcomp
  0 盘比较相同
  1 盘比较不同
  2 用户通过ctrl-c中止比较操作
  3 由于致命的错误使比较操作中止
  4 预置错误中止比较
  diskcopy
  0 盘拷贝操作成功
  1 非致命盘读/写错
  2 用户通过ctrl-c结束拷贝操作
  3 因致命的处理错误使盘拷贝中止
  4 预置错误阻止拷贝操作
  format
  0 格式化成功
  3 用户通过ctrl-c中止格式化处理
  4 因致命的处理错误使格式化中止
  5 在提示“proceed with format(y/n)?”下用户键入n结束
  xcopy
  0 成功拷贝文件
  1 未找到拷贝文件
  2 用户通过ctrl-c中止拷贝操作
  4 预置错误阻止文件拷贝操作
  5 拷贝过程中写盘错误
  脚本: 附件test.bat

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-525854-1-1.html 上篇帖子: PowerShell- Windows Powershell中的函数参数 下篇帖子: Windows网络服务介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表