[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理命令IF怎样根据用户输入来跳转?

3.bat 内容如下:
  1. @echo off
  2. :lny
  3. set /p l=用户:
  4. set /p n=密码:
  5. if %l% equ luonanyun if %n% equ 49322075 call 4.bat else goto lny
  6. pause
复制代码
4.bat 内容如下:
  1. @echo off
  2. echo 呵呵
复制代码
用户 密码输入对了 可以正常运行 但是输入错了 为什么不能返回到lny那里啊??

回复 8# luonanyun

第 2 段 if...else... 语句不是必须要被放在括号中的, 但有时可能是必要的(比如防止第 2 个 else... 成为 echo 或者 call 的参数),
最好的理由是为了代码易读性.

楼主在楼顶的代码, 判断方式上遗漏了 用户名 不正确的处理, 那种情形会继续 顺序 执行下面的代码.

严格意义上, 任何 if 语句, 你都应明确处理条件成立和不成立(即 else 部分)时的两个分支.
如果 任何一个 if 语句 没有对应的 else 部分, 那么你必须明确 这个 if 语句下面按顺序结构将要执行的代码 正是 那个被省略的 else 要做的(且丝毫不能有所偏差).

当多个 if...[else...] 多层嵌套时, 将构成一个复杂的 二分 逻辑树.
对于这个 逻辑树 的任何一个 分支节点 或者 叶节点, 同样都必须明确 这个节点对应的 组合条件状态 是什么, 又该要做什么.

下面小例子中, TEST 2 方式即是楼主在楼顶的处理方式, 例中, TEST 2 遗漏了 a ≠ 1 时的处理:
  1. @echo off & setlocal enabledelayedexpansion
  2. for %%i in (1 2) do for %%j in (5 6) do (
  3.   set "a=%%i" & set "b=%%j"
  4.   echo,&echo,状态&echo,a=!a!,b=!b!
  5.   echo,
  6.   echo,TEST 1
  7.   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)
  8.   echo,
  9.   echo,TEST 2
  10.   if !a! equ 1 if !b! equ 5 (echo,a==1 and b==5) else (echo,a==1 and b≠5)
  11.   REM 当 a≠1 时, TEST 2 的跳转方式 遗漏 了处理, 代码在顺序结构上执行下面的语句
  12.   echo,
  13.   echo,TEST 3
  14.   echo,TEST 1 和 TEST 2 未明确处理的情形都会转到此处
  15.   pause
  16. )
复制代码
1

评分人数

TOP

回复 8# luonanyun
  1. if "%l%" equ "luonanyun" (
  2.     if "%n%" equ "49322075" (
  3.         call 4.bat
  4.     ) else (
  5.         goto :lny
  6.     )
  7. ) else (
  8.     goto :lny
  9. )
复制代码

TOP

回复 4# neorobin
  1. 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 ?

TOP

呵呵 谢谢各位!!!

TOP

回复 5# 秋风·飞扬


    赞同,而且要分行写。

TOP

如果加了else         最好在判断语句后面加上()

TOP

回复 1# luonanyun

控制跳转那行改成这样的:
  1. if %l% equ luonanyun (if %n% equ 49322075 (call 4.bat) else goto lny) else goto lny
复制代码

TOP

我的意思是  用户密码输入对了  才调用4.bat 否则就返回到lny那里!
但是我输入错了  它不返回  就直接结束了  不知道怎么回事!

TOP

你把账号密码都写在里面不就能看到了吗?

TOP

返回列表