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

[原创] 详细解释批处理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的地方。

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

2

评分人数

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



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

TOP

  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
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

学习了,感谢你。

TOP

新手,学习到了,谢谢楼主

TOP

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

TOP

不明白的是GOTO END 是什么意思,望楼主赐教

TOP

哇塞~太神气了~~谢谢楼主~~

TOP

真是好帖,我又学会一招了
不管黑猫白猫,会捉老鼠的猫就是好猫!

TOP

看不懂晕    有没有从0开始的教程啊
┆醉┆   ┆卧┆   ┆沙┆   ┆滩┆

TOP

我来说几句:
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:楼主这种学习的精神和态度是值得大家来效仿的。
***共同提高***

TOP

回复 2楼 的帖子

查看set/?
/p开关就是把用户输入的内容作为变量的值。
心绪平和,眼藏静谧。

TOP

看了明白,就是不知道set /p s=请输入 (a或者b)的/p是什么意思

TOP

返回列表