假设我有一个复合命令(多个简单的CMD命令由运算符&
,&&
和/或||
连接)。我用括号括起来,然后放另一个条件执行运算符(&&
或||
),然后加上例如命令DIR
。
当解释器决定是否执行我的DIR
命令时,复合命令中哪些简单命令的成功执行将很重要?
我做了一些实验,似乎只有复合命令中最后一个简单命令的成功或失败对执行DIR
起决定性作用。
但是后来我碰到了这个page,上面写着“使用括号来测试几个命令是否成功”。这意味着解释器以某种方式汇总了复合命令中的简单命令返回的错误级别,这确实决定了(在我的示例中)DIR
是否要执行。
所以我很困惑...
答案 0 :(得分:4)
您最初的理解是正确的,&&
和||
运算符会响应最近执行的命令(或操作)
以下对原始page you referenced的声明是 错误 。
使用括号测试几个命令是否成功:
(Dir C:\Test1 & Dir C:\Test2) || Echo One or more of the commands failed.
上面的内容仅在第二个DIR失败时回显错误消息。
可以使用&&
代替&
来更正测试,但这是逻辑的简单结果,而不是其他一些功能。另外,代码短路-如果第一个DIR命令失败,则第二个命令将不执行。
(Dir C:\Test1 && Dir C:\Test2) || echo One of the DIR commands failed.
并且不需要括号。下面给出了完全相同的结果
Dir C:\Test1 && Dir C:\Test2 || echo One of the DIR commands failed.
在第一句话中,我说&&
和||
可以响应某个操作,因为它们响应诸如重定向之类的操作。
如果重定向失败或DIR失败,则以下内容将回显自定义错误消息。请注意,重定向发生在命令执行之前。如果重定向失败,则该命令将永远不会执行:
dir c:\test >x:\output.log || echo Redirection or dir failed
自从发布此问答以来,已更正了引用页面的内容:-)