Board logo

标题: [系统相关] [已解决]批处理if中,== 与equ 这2个,在什么情况下会有区别? [打印本页]

作者: ygqiang    时间: 2011-12-31 23:04     标题: [已解决]批处理if中,== 与equ 这2个,在什么情况下会有区别?

本帖最后由 pcl_test 于 2017-6-8 21:01 编辑
  1. rem 获取本机ip
  2. for /f "tokens=14 delims=: " %%b in ('ipconfig^|find /i "ip"') do set fsip=%%b
  3. echo %fsip%
  4. pause
  5. if "%fsip%" equ "10.10.9.200" (
  6.     goto :set0
  7. ) else if "%fsip%" equ "10.10.93.100" (
  8.     goto :set0
  9. ) else if "%fsip%" equ "10.10.94.200" (
  10.     goto :set0
  11. ) else if "%fsip%" equ "10.10.127.200" (
  12.     goto :set0
  13. )
  14. goto :set1
复制代码
  1. rem 获取本机ip
  2. for /f "tokens=14 delims=: " %%b in ('ipconfig^|find /i "ip"') do set fsip=%%b
  3. echo %fsip%
  4. pause
  5. if "%fsip%" == "10.10.9.200" (
  6.     goto :set0
  7. ) else if "%fsip%" == "10.10.93.100" (
  8.     goto :set0
  9. ) else if "%fsip%" == "10.10.94.200" (
  10.     goto :set0
  11. ) else if "%fsip%" == "10.10.127.200" (
  12.     goto :set0
  13. )
  14. goto :set1
复制代码
上面这2个代码,在什么情况下,会有不同的执行效果?

或者说:,== 与equ 这2个符号,分别都是用在什么情况下的? 会有什么区别呢?
作者: cjiabing    时间: 2012-1-1 00:39

没有什么区别啊,看说明:
  1. IF [NOT] string1==string2 command
  2. EQU - 等于
复制代码
两者都可以用。
作者: CrLf    时间: 2012-1-1 00:59

if 15 equ 0xf echo 数值比较时,15等于0xf
作者: ygqiang    时间: 2012-1-1 01:02

EQU是运算符,只能比较数字
==可以比较中文字符和数字英文等符号


实际测试了。上面的2个代码,都能正确运行。
作者: Demon    时间: 2012-1-1 01:10

都是夜猫子。
作者: CrLf    时间: 2012-1-1 01:30     标题: 标题

回复 5# Demon

呵呵,被窝里玩手机呢,中午睡过头了。

回复 4# ygqiang

数值比较时,进制的不同不影响结果,所以1等于01,而以字符串比较时,只是从左向右单纯逐字对比,这时01明显比1多了个0
作者: awk    时间: 2012-1-1 09:53

回复 4# ygqiang


谁说的equ只能比较数字?
作者: ygqiang    时间: 2012-1-1 11:29

我都搞糊涂了。

到底equ与==有什么不同呢?都用在什么场合下呢?
作者: CrLf    时间: 2012-1-1 11:32

寒夜孤星新浪博客里有详细解释
作者: ygqiang    时间: 2012-1-1 11:34

嗯。多谢版主。

祝元旦快乐啊。
作者: ygqiang    时间: 2012-1-1 11:41

http://blog.sina.com.cn/s/blog_51a4af870100f6bl.html

== 与 EQU 之间的区别:



  作为初学者,很容易将 == 与 EQU 混淆的认为他们一样,其实这是不对的。== 是用来比较相同的,换句话说,就是比较字符串是否完全相同的。而 EQU 是比较运算符,含有运算的功能,换句话说,是可以在比较之前转换数字为对应的数值,然后再比较。

  既然说到了数值,我们就扩展讲一下:数值是指十进制的数字,在前缀加 0× (这里x忽略大小写)则表示十六进制数字,加 0 则表示八进制数字。因此,0x12 与 18 相同,也与 022 相同,八进制表示法容易引起混淆。例如,08 和 09 不是有效数字,因为 8 和 9 不是有效的八进制数字。

  所以,在使用 == 比较时,0x12、022和18是不相等的,但在使用 EQU 比较时,他们是相等的,因为他们对应的数值都是18!
作者: ygqiang    时间: 2012-1-1 11:41

基本上看懂了。

这样看来,就1楼的情况来说,用equ与==,是没有区别的。
作者: x9tiancmd    时间: 2012-1-4 13:14

本帖最后由 x9tiancmd 于 2012-1-4 13:27 编辑

哎'  我来说句吧!
  ==     是比较 阿思ka码及支持的字符完全等价  if /i 时相对等价 !
     右集合比较机器码
完全匹配,也就是内存寄存类型都完全一至,遇到char类寄存时 0101 和 0141  无if /i  参数时是不匹配的 有该参数 时匹配!  
  注:0101 0141char类表示 大小a  如果看成整型的话 十进制差值32
    equ  整型 单精度型




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