Board logo

标题: [其他] 批处理跳转语句为何出错? [打印本页]

作者: wodesitanfu    时间: 2012-7-20 16:22     标题: 批处理跳转语句为何出错?

写了一段条件跳转语句,内容和用到的关键字都非常简单,可就是出错,b不管选择Y 或者N,脚本都不跳转,一直运行到结束。麻烦大家看下
  1. @echo off
  2. echo Please input your choose(Y/N)
  3. set /p choose=
  4. if /i %choose%=="Y" goto Y
  5. if /i %choose%=="N" goto N
  6. :Y
  7. echo this is choose 1
  8. pause
  9. exit
  10. :N
  11. echo this is you choose 2
  12. pause
  13. exit
复制代码

作者: forfiles    时间: 2012-7-20 16:42

把N前面的:改成:
作者: 乱码    时间: 2012-7-20 17:21

  1. @echo off
  2. set /p choose=Please input your choose(Y/N):
  3. if /i "%choose%"=="Y" goto Y
  4. if /i "%choose%"=="N" goto N
  5. echo choose error
  6. pause
  7. exit
  8. :Y
  9. echo this is choose 1
  10. pause
  11. exit
  12. :N
  13. echo this is you choose 2
  14. pause
  15. exit
复制代码
"%choose%" 加上"
:改成:
作者: ht河豚    时间: 2012-7-20 20:28

  1. @echo off
  2. set /p choose=Please input your choose(Y/N):
  3. if /i "%choose%"=="Y" goto Y
  4. if /i "%choose%"=="N" goto N
  5. echo choose error
  6. pause
  7. exit
  8. :Y
  9. echo this is choose 1
  10. pause
  11. exit
  12. :N
  13. echo this is you choose 2
  14. pause
  15. exit
复制代码
要有引号哦,除非你输的时候输入"y"
作者: poter    时间: 2012-7-20 20:46

BAT里的IF判断,字符串之间的比较都要加引号。纯数之间的比较不用加
作者: wudixin96    时间: 2012-7-20 21:43

回复 5# poter


    这个倒不是说字符都要加,只是如果一边加了,另一边也要加而已。
作者: poter    时间: 2012-7-21 10:46

回复 6# wudixin96


    加了引号比较就是ascII的排序,你会发现a比0大

不加的话就是纯数学比较
作者: wudixin96    时间: 2012-7-21 21:36

回复 7# poter
  1. @echo off
  2. if a gtr 0 echo ok
  3. if "a" gtr "0" echo ok
  4. pause
复制代码
你试试啊,有什么区别
作者: CrLf    时间: 2012-7-21 22:25

本帖最后由 CrLf 于 2012-7-21 22:37 编辑

回复 7# poter


    并非比较 asc,比如 a<A<b 就是个反例,if 的字符串比较机制基于区域语言设置和代码页对应的 nls 文件,详见此帖顶楼大字部分:http://bbs.bathome.net/viewthread.php?tid=14681


回复 8# wudixin96


    这样呢?
  1. if 10 lss 9 (echo 10 lss 9) else echo not 10 lss 9
  2. if "10" lss "9" (echo "10" lss "9") else echo not "10" lss "9"
复制代码

作者: wudixin96    时间: 2012-7-21 22:32

回复 9# CrLf


    数字来说,你加双引号当然是文本比较啦。
作者: CrLf    时间: 2012-7-21 22:35

回复 10# wudixin96


    详见 plp626 的测试结果:
http://bbs.bathome.net/viewthread.php?tid=12314
作者: wudixin96    时间: 2012-7-24 13:02

这个就是你理解不对了,你把字符比较与数字比较混了。
作者: wodesitanfu    时间: 2012-7-24 15:30

高人,我真没注意到这些,不过估计有点数值类型比较的含义在里面,毕竟右边是右“”引用的,一般是指字符串类型吧,左边起码也要有类型的,虽然BAT里面没有数值类型的概念,




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2