回复 8# luonanyun
第 2 段 if...else... 语句不是必须要被放在括号中的, 但有时可能是必要的(比如防止第 2 个 else... 成为 echo 或者 call 的参数),
最好的理由是为了代码易读性.
楼主在楼顶的代码, 判断方式上遗漏了 用户名 不正确的处理, 那种情形会继续 顺序 执行下面的代码.
严格意义上, 任何 if 语句, 你都应明确处理条件成立和不成立(即 else 部分)时的两个分支.
如果 任何一个 if 语句 没有对应的 else 部分, 那么你必须明确 这个 if 语句下面按顺序结构将要执行的代码 正是 那个被省略的 else 要做的(且丝毫不能有所偏差).
当多个 if...[else...] 多层嵌套时, 将构成一个复杂的 二分 逻辑树.
对于这个 逻辑树 的任何一个 分支节点 或者 叶节点, 同样都必须明确 这个节点对应的 组合条件状态 是什么, 又该要做什么.
下面小例子中, TEST 2 方式即是楼主在楼顶的处理方式, 例中, TEST 2 遗漏了 a ≠ 1 时的处理:- @echo off & setlocal enabledelayedexpansion
-
- for %%i in (1 2) do for %%j in (5 6) do (
- set "a=%%i" & set "b=%%j"
- echo,&echo,状态&echo,a=!a!,b=!b!
- echo,
- echo,TEST 1
- if !a! equ 1 if !b! equ 5 (echo,a==1 and b==5) else (echo,a==1 and b≠5) else (echo,a≠1)
- echo,
- echo,TEST 2
- if !a! equ 1 if !b! equ 5 (echo,a==1 and b==5) else (echo,a==1 and b≠5)
- REM 当 a≠1 时, TEST 2 的跳转方式 遗漏 了处理, 代码在顺序结构上执行下面的语句
- echo,
- echo,TEST 3
- echo,TEST 1 和 TEST 2 未明确处理的情形都会转到此处
- pause
- )
复制代码
|