免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1712 | 回复: 2
打印 上一主题 下一主题

批处理if and 比较出现奇怪问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-31 18:17 |只看该作者 |倒序浏览
部分代码
  1. if "%%a"=="%%g" (if "%%d"=="%%o" goto ok)else ( goto error)

  2. )
  3. )
  4. )
  5. )

  6. :ok
  7. mkdir OKKKKKKKKKKK
  8. pause

  9. :error
  10. mkdir erorrrrrrrrr
  11. pause
复制代码
目的是比较文件的MD5值 如果 a=g 且 d=o的值 就执行 goto ok,否则执行error

我做了个测试,a和g 值不相等 d=o,  执行正常 goto error了


但是参数的位置换下 if "%%d"=="%%o" (if "%%a"=="%%g" goto ok)else ( goto error)
这样却执行了goto ok 了,奇怪!

所以请教下大家 是不是 做双重判断的时候 第二个if判断失效?
代码错误? 求教~!

论坛徽章:
0
2 [报告]
发表于 2012-11-18 16:03 |只看该作者
首先给出正确的代码


  1. @echo off
  2. set a=9256f96fba23a1f2ad631433d1bec872
  3. set g=f62216cce796a9a5b3132a06d6b0e4dd
  4. set d=71d5e485ad801f78c8f416d33563dcd5
  5. set o=71d5e485ad801f78c8f416d33563dcd5

  6. if %d% == %o%  (
  7.         if %a% == %g% (goto ok) else (goto no)
  8. ) else (
  9.         goto no
  10. )

  11. :end
  12.         pause
  13.         exit /b

  14. :ok
  15.         echo.ok
  16. goto end

  17. :no
  18.         echo.no
  19. goto end
复制代码


按照lz的题意 - 目的是比较文件的MD5值 如果 a=g 且 d=o的值 就执行 goto ok,否则执行error 但你的代码是错误的

从你的图片中可以看出:

a = 9256f96fba23a1f2ad631433d1bec872
g = f62216cce796a9a5b3132a06d6b0e4dd
d = 71d5e485ad801f78c8f416d33563dcd5
o = 71d5e485ad801f78c8f416d33563dcd5

我们来分析一下这一条语句 - if "%%d"=="%%o" (if "%%a"=="%%g" goto ok)else ( goto error)

首先比较 "%%d"=="%%o" yes|no?

yes, 再比较 "%%a"=="%%g" yes|no?

no. 整条if语句执行完毕

ps: lz只是写出当 %%a == %%g 跳转到 ok 在不等于的情况下什么都不做 继续执行下一条语句

这条if语句应该是包含在for语句中的 那么这时候 for 应该正好满足退出条件 所以 向下走 自然走到了 mkdir OKKKKKKKKKKK

lz可以把 :ok 和 :error 对换一下 即可看到不同的结果 即:


  1. if "%%a"=="%%g" (if "%%d"=="%%o" goto ok)else ( goto error)

  2. )
  3. )
  4. )
  5. )

  6. :error
  7. mkdir erorrrrrrrrr
  8. pause

  9. :ok
  10. mkdir OKKKKKKKKKKK
  11. pause
复制代码


or


  1. :error
  2. mkdir erorrrrrrrrr
  3. pause

  4. :ok
  5. mkdir OKKKKKKKKKKK
  6. pause

  7. if "%%a"=="%%g" (if "%%d"=="%%o" goto ok)else ( goto error)

  8. )
  9. )
  10. )
  11. )
复制代码


论坛徽章:
0
3 [报告]
发表于 2012-11-21 17:48 |只看该作者
回复 2# lenovonew



谢谢这位大神,这么耐心加细心,连md5都写上了!

恍然大悟~


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP