Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带或不带errorlevel的Windows批处理退出选项b_Windows_Batch File_Errorlevel - Fatal编程技术网

带或不带errorlevel的Windows批处理退出选项b

带或不带errorlevel的Windows批处理退出选项b,windows,batch-file,errorlevel,Windows,Batch File,Errorlevel,我是在Windows上使用批处理的新手,对errorlevel的使用有疑问 我在谷歌上引用了很多例子 大多数使用了%errorlevel%的/b,如下所示 if errorlevel 1 exit /b %errorlevel% 我想知道两者之间的区别 if errorlevel 1 exit /b 及 我认为没有区别,因为%errorlevel%没有改变。我错了吗?TL;博士 大多数情况下应该没有区别,但是如果您希望在不更改错误级别的情况下退出,那么从技术上讲,exit/b%errorle

我是在Windows上使用批处理的新手,对errorlevel的使用有疑问

我在谷歌上引用了很多例子

大多数使用了%errorlevel%的/b,如下所示

if errorlevel 1 exit /b %errorlevel%
我想知道两者之间的区别

if errorlevel 1 exit /b

我认为没有区别,因为%errorlevel%没有改变。我错了吗?

TL;博士 大多数情况下应该没有区别,但是如果您希望在不更改错误级别的情况下退出,那么从技术上讲,
exit/b%errorlevel%
要比
exit/b
差得多

分析
EXIT/B
如果没有可选的errorlevel参数,则不会更改错误级别,因此作为一个独立命令,只要
%errorlevel%
解析为当前错误级别,它就完全等同于
EXIT/B%errorlevel%

但在某些情况下,它可能不会这样做:

  • 如果定义了名为
    ERRORLEVEL
    的环境变量,则
    %ERRORLEVEL%
    始终解析为其值(可以是任意值),而不是当前错误级别
  • 如果命令扩展被禁用,则
    %errorlevel%
    将永远不会解析为当前错误级别(如果定义了该名称,它仍将读取环境变量的值)。您可以通过使用
    CMD/E:OFF启动命令提示符并尝试
    ECHO%errorlevel%
    来验证这一点
  • %errorlevel%
    生成的当前错误级别值将在解析命令时固定,而不是在执行到达该表达式时固定。这可能会导致为更复杂的命令生成错误的值。例如:

    copy j:\not_existing q:\not_existing & echo %errorlevel%
    
    这将不会产生与预期相同的结果

    copy j:\not_existing q:\not_existing
    echo %errorlevel%
    
    因为在第一种情况下,
    %errorlevel%
    不会产生由失败的
    复制引起的更新错误级别


    • 您的代码都没有意义。他们没有一个人做任何事

      类型

      通过将errorlevel更改为0,我已将您的代码更改为运行。这是输出

      C:\Users\user>if errorlevel 0 /b 0
      '/b' is not recognized as an internal or external command,
      operable program or batch file.
      
      C:\Users\user>if errorlevel 0 /b
      '/b' is not recognized as an internal or external command,
      operable program or batch file.
      
      C:\Users\user>if errorlevel 0 /b 9009
      '/b' is not recognized as an internal or external command,
      operable program or batch file.
      

      也许你不必在网上搜索,而可以学习规则。

      现在有人编辑了你的问题,阅读该行时,%errorlevel%将展开。对errorlevel所做的任何更改都不会影响该行;很明显,我们在这里讨论的是
      exit/b
      (例如,这就是TechNet文章的内容)。
      if errorlevel
      if%errorlevel%=
      不同。如果errorlevel
      ,您永远不会使用%errorlevel%代替
      。大多数情况下,它的工作原理是一样的。正如另一张海报所指出的,情况并不总是一样的。即使没有改变,行为上也有细微的差别。我使用的命令只是批处理命令的一部分。我知道单独使用“如果”或“退出”是没有意义的。一定还有其他一些命令会影响“%errorlevel%”。很抱歉,这个“答案”对讨论没有任何帮助,并且通过告诉新手“阅读规则”来贬低他们(SO和批处理主题)似乎没有帮助。显然,他们已经做了一些研究,techNet链接(包括“/?”帮助参数)证明了这一点,并且对文章或命令行帮助中未涉及的行为提出了合理的问题-1最后一项可以通过使用
      copy j:\not\u existing q:\not\u existing&echo启用和应用来解决!错误等级
      if /?
      
      exit /?
      
      C:\Users\user>if errorlevel 0 /b 0
      '/b' is not recognized as an internal or external command,
      operable program or batch file.
      
      C:\Users\user>if errorlevel 0 /b
      '/b' is not recognized as an internal or external command,
      operable program or batch file.
      
      C:\Users\user>if errorlevel 0 /b 9009
      '/b' is not recognized as an internal or external command,
      operable program or batch file.