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

[其他] 批处理if命令为何不能正常处理〇这个字符?

  1. @echo off
  2. if "〇"=="" (echo 〇为空)else echo 〇不为空
  3. rem 显示〇为空
  4. if "12〇34"=="1234" (echo 相同)else echo 不同
  5. rem 显示相同
  6. if 12〇34==1234 (echo 相同)else echo 不同
  7. rem 显示相同
  8. pause
复制代码

那里不正常?

没发现

TOP

  这个问题很有意思,貌似 〇 在这里被当做空值来处理了,迷惑中。

  不过,你的代码有点小问题,else和后括号连在一起了,只是对结果没什么影响。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

原帖由 namejm 于 2010-4-6 16:20 发表
  这个问题很有意思,貌似 〇 在这里被当做空值来处理了,迷惑中。

  不过,你的代码有点小问题,else和后括号连在一起了,只是对结果没什么影响。


俺以前也是好孩子,按着语法中规中矩的写。。。只是后来跟某些人学坏了,能少打一个字符就少打一个字符,连空格都不放过,嘿嘿。

在写一个批处理,其中一个变量的值的字符串中含有〇这个字符,我就计算不明白这个变量的值有多少个字符了。怎么弄结果都不对。后来才发现是〇这个字符引起的。

TOP

Vista 测试完全正常,结果与楼主刚好相反

TOP

Microsoft Windows [Version 6.0.6001]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Test>if "〇"=="" (echo 〇为空)else echo 〇不为空
〇不为空

C:\Test>if "12〇34"=="1234" (echo 相同)else echo 不同
不同

C:\Test>if 12〇34==1234 (echo 相同)else echo 不同
不同

TOP

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.


C:\Documents and Settings\寒夜孤星>if "〇"=="" (echo 〇为空)else echo 〇不为空
〇为空


C:\Documents and Settings\寒夜孤星>if "12〇34"=="1234" (echo 相同)else echo 不同
相同


C:\Documents and Settings\寒夜孤星>if 12〇34==1234 (echo 相同)else echo 不同
相同


C:\Documents and Settings\寒夜孤星>


俺的系统是  xp sp3 。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

我也用的 WINXP SP3 CHS, 改了下代码, 显示字符串改了英文, 用了 chcp 437, 结果如愿了
  1. cd \ & @echo on & chcp 437 & ver
  2. if "〇"=="" (echo 〇 is empty) else echo 〇 is not empty
  3. if "12〇34"=="1234" (echo SAME) else echo NOT same
  4. if 12〇34==1234 (echo SAME) else echo NOT same
  5. if "12〇34" equ "1234" (echo SAME) else echo NOT same
  6. pause
复制代码
结果如下:
Active code page: 437

Microsoft Windows XP [?? 5.1.2600]

D:\>if "⌐û" == "" (echo ⌐û is empty )  else echo ⌐û is not empty
⌐û is not empty

D:\>if "12⌐û34" == "1234" (echo SAME )  else echo NOT same
NOT same

D:\>if 12⌐û34 == 1234 (echo SAME )  else echo NOT same
NOT same

D:\>if "12⌐û34" EQU "1234" (echo SAME )  else echo NOT same
NOT same

曾经也有一个 if 字符串比较的问题(关于短横线,单引号), 网上搜索未果, 到 MS 官网提问, 也没得到答案.
MS 不开源, 好多问题问 MS 也难得解答, 要弄清这类问题有时恐需用到 反编译, DEBUG 之类的手段对 CMD 来一个深度解剖, 我能力不及, 望有乐意用能力者试一下.

[ 本帖最后由 neorobin 于 2010-4-6 21:37 编辑 ]

TOP

呵呵 有意思,不知道别的特殊符号有什么有什么效果
@echo off
set /p=>hlw1.txt<nul

TOP

"〇"这个字符怎么来的?
有一种爱叫放弃

TOP

本帖最后由 Demon 于 2012-8-13 16:03 编辑

if在内部是使用lstrcmpW函数来比较字符串是否相等的(详见《批处理技术内幕:IF命令》
  1. #include <stdio.h>
  2. #include <Windows.h>
  3. int main()
  4. {
  5.     wchar_t s1[] = L"〇";
  6.     wchar_t s2[] = L"";
  7.     printf("%d\n", lstrcmpW(s1, s2));
  8.     return 0;
  9. }
复制代码
XP系统下返回0,Vista之后的系统返回1,也许是XP系统的lstrcmp函数有BUG?

TOP

返回列表