Windows 如何| |和&&;使用由括号包围的复合命令?
假设我有一个复合命令(由操作符Windows 如何| |和&&;使用由括号包围的复合命令?,windows,batch-file,cmd,Windows,Batch File,Cmd,假设我有一个复合命令(由操作符&、&和/或|连接的多个简单CMD命令)。我用括号将它括起来,然后放入另一个条件执行操作符(&&或|),后面跟着命令DIR 当解释器决定是否执行我的DIR命令时,复合命令中哪一个简单命令失败的成功与否至关重要 我做了一些实验,似乎只有我的复合命令中最后一个简单命令的成功或失败才是执行DIR的决定性因素 但后来我遇到了这个问题,它说“使用括号来测试几个命令的成功”。这意味着解释器以某种方式聚合了由复合命令中的简单命令返回的错误级别,并决定是否执行(在我的示例中)DIR
&
、&
和/或|
连接的多个简单CMD命令)。我用括号将它括起来,然后放入另一个条件执行操作符(&&
或|
),后面跟着命令DIR
当解释器决定是否执行我的DIR
命令时,复合命令中哪一个简单命令失败的成功与否至关重要
我做了一些实验,似乎只有我的复合命令中最后一个简单命令的成功或失败才是执行DIR
的决定性因素
但后来我遇到了这个问题,它说“使用括号来测试几个命令的成功”。这意味着解释器以某种方式聚合了由复合命令中的简单命令返回的错误级别,并决定是否执行(在我的示例中)DIR
所以我很困惑 您最初的理解是正确的,
&&
和|
运算符响应最近执行的命令(或操作)
以下关于原件的声明是错误的
使用括号测试几个命令是否成功:
(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
注
自发布此问答后,引用页面的内容已被更正:-)您介意分享您的实验吗?这对我们来说更令人困惑,我们甚至看不到您尝试过的命令行。请发布它们,当我们不知道需要修复什么时,我们无法帮助您修复。请注意,
&&
和| |
响应最新命令的返回代码,这与cmd ERRORLEVEL值不同。你的标题可能会让人感到困惑。注意-SS64页已经更正。@dbenham这个问题的好标题是什么?