[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 CrLf 于 2011-10-8 13:29 编辑

但是如此一来,||的触发条件似乎更难理解了,何谓“前一条命令运行失败”呢?依照楼主所做的猜测,||可以不通过 errorlevel 就能够判断命令是否成功运行,这是楼主观点的基础,可是如何证明?本贴中似乎没有提供针对此问题直接证据或者客观推导,唯一的论据只是微软含糊不清的一面之辞...
再进一步,若果真如此,那么它又是以什么为“命令执行失败”的依据呢?

TOP

噢,俺英语不好~
不过那个疑惑仍然没解开,||的触发条件究竟是什么?莫非是多条相互独立的触发条件(原来一直以为只有 errorlevel,因为从来没有遇到其他情况)?
另外,从楼主的猜测还得出一个有趣的推论,就是 errorlevel 并不是在一条命令结束之后立刻被定义的,而是执行完命令并判断连接符是否为 || 才决定何时定义(&、&&、|均不影响,唯独 || 例外)...

TOP

回复 6# ivor


    单就 xx || echo %errorlevel% 这一句来说吧,%errorlevel% 是在 cmd 对整行进行预处理时就解释了的,而不是在 echo %errorlevel% 这句预处理时解释的,所以你看到的 errorlevel 是执行 xx 之前的:
  1. xx || echo %errorlevel%
  2. xx || echo %errorlevel%
  3. ::同样的两句,显示的 errorlevel 却不同,原因就在于这里的 errorlevel 都是隔夜饭,不是新鲜出炉的
复制代码
可以改用变量延迟来解释变量:
  1. xx || cmd /v /c echo !errorlevel!
  2. ::%errorlevel% 与 !errorlevel! 的区别在于,前者是以行(更确切地说应该是复合语句)为单位解释的,取到的是上一行运行结束后的变量,而后者是以一条命令为单位临时解释的,所以取到的是上一条命令的结果
复制代码

TOP

返回列表