Board logo

标题: [原创] 详细解释批处理if命令比较两个字符串是否相等 [打印本页]

作者: lixiaodaoaaa    时间: 2008-8-12 08:46     标题: 详细解释批处理if命令比较两个字符串是否相等

注释:高手跳过,新手请跟着我学习,我也是菜鸟,希望大家把自己的心得体会
都发表上来,我们共同学习,共同提高!!!
  1. @echo off
  2. set /p s=请输入(1,或者2):
  3. if "%s%" equ "1" goto 1
  4. if "%s%" equ "2" goto 2
  5. goto end
  6. :1
  7. echo 哈哈&goto end
  8. :2
  9. echo 呵呵
  10. :end
  11. pause
复制代码


练习一下,再写一个,你看看
  1. @echo off
  2. set /p s=请输入(a或者b):
  3. if  /i "%s%" equ "a" goto a
  4. if  /i "%s%" equ "b" goto b
  5. goto end
  6. :a
  7. echo 哈哈&goto end
  8. :b
  9. echo 呵呵
  10. :end
  11. pause
复制代码
自己复制代码,自己看实验效果吧,测试成功的!哈!
其实不难的。。


解释一下哈: set /p s=请输入 (a或者b)
这个运行后,就会显示  请输入 (a或者b)
if  /i "%s%" equ "a" goto a
注释,以前老不懂 equ 是什么意思,现在终于明白来哈!
equ就是等于的意思, 结合第一句,就是请把输入的值给变量s

if  /i "%s%" equ "a" goto a
如果这个s值equal a,就是说s值是a的话,就跳转到a 的标签那地方
利用了goto命令,跳转,直接跳到a后面的命令的地方了。
if  /i "%s%" equ "b" goto b

这个相信大家一定能够解释出来吧,就是说,如果s的值等于b ,就跳转到标签的b的地方。

写完了,也许写的不对,恳请大家批评指正,谢谢


作者: cwjvicky    时间: 2008-8-12 09:36

看了明白,就是不知道set /p s=请输入 (a或者b)的/p是什么意思
作者: pusofalse    时间: 2008-8-12 10:48     标题: 回复 2楼 的帖子

查看set/?
/p开关就是把用户输入的内容作为变量的值。
作者: batman    时间: 2008-8-12 13:22

我来说几句:
if 是批处理常用的判断语句,灵活运行用if是非常重要的。。。
if句式中的比较符是大家首先要掌握的,比效符有== lss leq equ geq gtr neq
== 就是我们平常用的等号,只是为了区别使用了两个等号
lss   小于
leq   小于等于
equ  等于
geq  大于等于
gtr    大于
neq  不等于
最要注意的一点就是比较双方加不加引号的问题,如比较的双方一定是数值的
话最好是不要加,为什么,先看示例:
  1. @echo off
  2. if 5 gtr 12 (echo 5^>12) else (echo 5^<12)
  3. if "5" gtr "12" (echo 5^>12) else (echo 5^<12)
  4. pause>nul
复制代码
怎么样第二句的运行结果是不是出人意料,其实当比较双方被加上双引号后if是
把对象当作unicode字符来进行比效的,也就是按字符排序顺序来比较先后的,
5的字符排序在1后,所以第二句出来的结果就是5>12。
那么既然是这样,是不是所有的比较过程中都不要给对象加双引号呢?我们再看
一个示例:
  1. @echo off
  2. set /p a=请输入值:
  3. if %a% neq 1 (echo no) else (echo yes)
  4. pause>nul
复制代码
当直接回车后,程序会报错(此时不应有1)并退出,而将双较的对象都加上双引
号后直接回车就会显示no了。所以,当比较的一方有可能值为空的时候,请给比
较的对象加上双引号。
好了,就讲这么多了,其实还有很多要注意的地方如:if /i,还是大家自己在平常
练习中多去体会和总结了。
ps:楼主这种学习的精神和态度是值得大家来效仿的。
作者: 2620286    时间: 2008-8-12 16:25

看不懂晕    有没有从0开始的教程啊
作者: AK47    时间: 2008-9-22 00:19

真是好帖,我又学会一招了
作者: mvm    时间: 2010-2-8 04:06

哇塞~太神气了~~谢谢楼主~~
作者: js588    时间: 2010-4-3 20:41

不明白的是GOTO END 是什么意思,望楼主赐教
作者: hantmite    时间: 2010-4-16 20:06

楼上  简单来说  goto end就是goto到一个定义好的命令位置,在这个代码中你可以看到:end  这就是定义好了的位置,冒号就是位置定义。这个位置你可以命名成你想要的,例如 把end换成 good   你就可以goto good   。
我的理解是这样
作者: js588    时间: 2010-4-25 21:15

新手,学习到了,谢谢楼主
作者: wangtao6312    时间: 2012-4-18 07:58

学习了,感谢你。
作者: cjiabing    时间: 2012-4-19 21:30

  1. 菜单与输入的经典范例:
  2. :input
  3. cls
  4. echo;
  5. set input=
  6. set /p input=请输入:
  7. if  "%input%"=="" goto input
  8. if "%input%"=="A"  echo;输入的是 A&pause
  9. echo;输入错误,请重试!
  10. pause
  11. goto input
复制代码

作者: luonanyun    时间: 2012-5-17 15:27

我来说几句:
if 是批处理常用的判断语句,灵活运行用if是非常重要的。。。
if句式中的比较符是大家首先要 ...
batman 发表于 2008-8-12 13:22



    第二段代码我给变量%a%加上了双引号但是不管输入什么都显示的NO  .......
   给1加上双引号也是同样的效果!
   求解答!




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