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

[其他] 批处理跳转语句为何出错?

写了一段条件跳转语句,内容和用到的关键字都非常简单,可就是出错,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
复制代码

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

TOP

这个就是你理解不对了,你把字符比较与数字比较混了。

TOP

回复 10# wudixin96


    详见 plp626 的测试结果:
http://bbs.bathome.net/viewthread.php?tid=12314

TOP

回复 9# CrLf


    数字来说,你加双引号当然是文本比较啦。

TOP

本帖最后由 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"
复制代码

TOP

回复 7# poter
  1. @echo off
  2. if a gtr 0 echo ok
  3. if "a" gtr "0" echo ok
  4. pause
复制代码
你试试啊,有什么区别

TOP

回复 6# wudixin96


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

不加的话就是纯数学比较

TOP

回复 5# poter


    这个倒不是说字符都要加,只是如果一边加了,另一边也要加而已。

TOP

BAT里的IF判断,字符串之间的比较都要加引号。纯数之间的比较不用加

TOP

  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"

TOP

  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%" 加上"
:改成:
求老大赐我《精通正则表达式》

TOP

把N前面的:改成:

TOP

返回列表