标题: 批处理命令IF怎样根据用户输入来跳转? [打印本页]
作者: luonanyun 时间: 2012-5-11 09:49 标题: 批处理命令IF怎样根据用户输入来跳转?
3.bat 内容如下:- @echo off
- :lny
- set /p l=用户:
- set /p n=密码:
- if %l% equ luonanyun if %n% equ 49322075 call 4.bat else goto lny
- pause
复制代码
4.bat 内容如下:复制代码
用户 密码输入对了 可以正常运行 但是输入错了 为什么不能返回到lny那里啊??
作者: lunafay 时间: 2012-5-11 09:54
你把账号密码都写在里面不就能看到了吗?
作者: luonanyun 时间: 2012-5-11 10:01
我的意思是 用户密码输入对了 才调用4.bat 否则就返回到lny那里!
但是我输入错了 它不返回 就直接结束了 不知道怎么回事!
作者: neorobin 时间: 2012-5-11 10:16
回复 1# luonanyun
控制跳转那行改成这样的:- if %l% equ luonanyun (if %n% equ 49322075 (call 4.bat) else goto lny) else goto lny
复制代码
作者: 秋风·飞扬 时间: 2012-5-11 10:38
如果加了else 最好在判断语句后面加上()
作者: gawk 时间: 2012-5-11 12:50
回复 5# 秋风·飞扬
赞同,而且要分行写。
作者: luonanyun 时间: 2012-5-11 14:11
呵呵 谢谢各位!!!
作者: luonanyun 时间: 2012-5-23 16:14
回复 4# neorobin - if %l% equ luonanyun (if %n% equ 49322075 (call 4.bat) else goto lny) else goto lny
复制代码
为什么第二个条件要单独在括号里面写啊?
还有就是第一个条件 if %l% equ luonanyun 这句为什么不能换成if %l% equ luonanyun call 4.bat ?
作者: gawk 时间: 2012-5-23 18:35
回复 8# luonanyun - if "%l%" equ "luonanyun" (
- if "%n%" equ "49322075" (
- call 4.bat
- ) else (
- goto :lny
- )
- ) else (
- goto :lny
- )
复制代码
作者: neorobin 时间: 2012-5-23 18:39
回复 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
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |