Re fan927:
楼主在7楼10楼的else用法实际上是错误的。在cmd中else子句必须位于if子句的尾部之后,而尾部的标志是右圆括弧 ")",具体参见。所以,楼主的else因为直接跟随在goto label之后而被忽略,所以是无效的。
如果使用 f "%a%"=="dog" (goto dog) else goto pig 使else子句有效,则程序的流程分支将会不符合预期,即%a%不为dog即去goto pig,以后的if语句将均被忽略。
Re Wengier:
if/goto样式和if/else样式的选择,实际上主要取决于个人的编写风格,比如从DOS Batch中成长的我,便喜欢使用goto样式的分支跳转,因为它具有更强的兼容性,而且这样的样式可以使我快速浏览代码中基本的分支流程,而不需要滚动和翻页。
其它的选择理由还有一些,比如我不太喜欢每行语句的长度超过80个字符,这不仅仅是DOS下文本编辑器所带来的遗留习惯,主要是它可以增加阅读代码时的休息停顿频率,以提高代码的可阅读性。毕竟在大多数情况下,几个短句总是比一个等价的长句更易于理解。当然,if/else样式也可以改成短句型式,但是这样它就不再简洁了。
引自cmd@WinXP的set命令行帮助信息
ELSE 子句必须在 IF 之后出现在同一行上。例如:
IF EXIST filename. (
del filename.
) ELSE (
echo filename. missing.
)
因为 del 命令需要用一个新行终止,以下子句不会有效:
IF EXIST filename. del filename. ELSE echo filename. missing
由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
不会有效:
IF EXIST filename. del filename.
ELSE echo filename. missing
如果都放在同一行上,以下子句有效:
IF EXIST filename. (del filename.) ELSE echo filename. missing