找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21354|回复: 9

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

[复制链接]
发表于 2012-5-11 09:49:39 | 显示全部楼层 |阅读模式
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那里啊??
发表于 2012-5-11 09:54:12 | 显示全部楼层
你把账号密码都写在里面不就能看到了吗?
 楼主| 发表于 2012-5-11 10:01:32 | 显示全部楼层
我的意思是  用户密码输入对了  才调用4.bat 否则就返回到lny那里!
但是我输入错了  它不返回  就直接结束了  不知道怎么回事!
发表于 2012-5-11 10:16:00 | 显示全部楼层
回复 1# luonanyun

控制跳转那行改成这样的:
  1. if %l% equ luonanyun (if %n% equ 49322075 (call 4.bat) else goto lny) else goto lny
复制代码
发表于 2012-5-11 10:38:01 | 显示全部楼层
如果加了else         最好在判断语句后面加上()
发表于 2012-5-11 12:50:52 | 显示全部楼层
回复 5# 秋风·飞扬


    赞同,而且要分行写。
 楼主| 发表于 2012-5-11 14:11:45 | 显示全部楼层
呵呵 谢谢各位!!!
 楼主| 发表于 2012-5-23 16:14:41 | 显示全部楼层
回复 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 ?
发表于 2012-5-23 18:35:39 | 显示全部楼层
回复 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. )
复制代码
发表于 2012-5-23 18:39:50 | 显示全部楼层
回复 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技术 +1 收起 理由
luonanyun + 1 非常感谢!!!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:00 , Processed in 0.020640 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表