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

[文本处理] 批处理怎样快速简洁判断一个字母是大写还是小写?

如题,这个问题的思考源于 这个帖子
16进制数据最小体积存储
在此求助下。。谢谢。

本帖最后由 zm900612 于 2011-5-17 20:28 编辑
什么叫“怪事”啊?楼上不是经常关注这些帖子吗?24楼就有答案:
if 比较时, 字母表次序是这样的:
43:{a}
44:{A}
45:{b}
46:{B}
...
其实不只是if,findstr也如此。
此帖更全面:[分享]ASCII码单字符 批处理 ...
powerbat 发表于 2011-5-17 20:16

很早就知道if中字符的大小排序自有其规律,但是findstr...我以前一直以为[A-Z]就是纯大写,既然用了正则,为什么还搞这么大一个漏洞,害死人了
不过既然是按ansi码排序,那以后可以这么用了:
  1. echo>a.txt ;
  2. findstr "[:-=]" a.txt
复制代码

TOP

什么叫“怪事”啊?楼上不是经常关注这些帖子吗?24楼就有答案:
if 比较时, 字母表次序是这样的:
43:{a}
44:{A}
45:{b}
46:{B}
...
其实不只是if,findstr也如此。
此帖更全面:[分享]ASCII码单字符 批处理IF命令比较顺序
此帖有原理说明:Windows 代码页与字符顺序
第一类如 if 、sort 等,按以上顺序排列字符;其他 32 位程序绝大多数也是如此,例如资源管理器、外壳程序等等。

TOP

echo %1|findstr "[ABCDEFGHIJKLMNOPQRSTWUYXYZ]">nul &&echo 大写||echo 小写

发现 [A-Z] 的写法有问题
caruko 发表于 2011-5-17 17:18

怪事,我试了下还真是,为什么会出现这么奇怪的现象...

TOP

本帖最后由 caruko 于 2011-5-17 17:27 编辑

echo %1|findstr "[ABCDEFGHIJKLMNOPQRSTWUYXYZ]">nul &&echo 大写||echo 小写

发现 [A-Z] 的写法有问题

TOP

闻道有先后,术业有专攻,如是而已。
切磋,切磋,如切如磋。
淡定了大家。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

39# abcdshenji
完全没有打击的意思,我只是想抱怨一下“第一眼还以为是你的研究结果”,仔细看才发现是ASCII表——我不是搞编程的,对ASCII也完全不熟(不然不必“仔细”),不查表也不知道ascii=15到ascii=35之间都有哪些字符,只是有这个概念,见到了它知道它是个啥,不至于两眼一抹黑。——其实我想表达的意思是,作者应该把“ASCII表”这几个字交待一下,免得误解。

不要被37楼“会打击新人积极性的”给误导了,呵呵,plp626是牛人,不能和他比。

TOP

本帖最后由 qzwqzw 于 2011-5-15 22:22 编辑

30# plp626
基本上可以确定是wcscmp和wcsncmp
还有忽略大小写的_wcsicmp
是按照字典序(lexicographic comparison)进行比较
这个字典序跟代码页相关
主要是在locale中的LC_COLLATE中指定
中文环境下cmd.exe的LC_COLLATE值为
Chinese_People's Republic of China.936
进一步的信息还未获取到
天的白色影子

TOP

本帖最后由 abcdshenji 于 2011-5-15 21:50 编辑

37# powerbat


我忍不住得说你两句。。你都知道ascii码是吧。。好考考你。。ascii=15到ascii=35之间都有哪些字符?请迅速回答。。我只想说的是,不要随便打击新人。。还有很多新人(比如我)不知道ASCII表的。。如果你回答不出来。。不好意思请你谦虚点可以吗。。

TOP

32# techon
除了ascii=00外,其余255个ascii字符都可以用变量表示。
PS:你把ASCII表贴出来有啥意义啊,大家都知道滴。第一眼还以为是你的研究结果,晕。。。

35# techon
if “字符变量” gtr “字符变量”, ...
powerbat 发表于 2011-5-15 13:07



看 techon 是新注册会员,你这样会打击新人积极性的。

TOP

32# techon
除了ascii=00外,其余255个ascii字符都可以用变量表示。
PS:你把ASCII表贴出来有啥意义啊,大家都知道滴。第一眼还以为是你的研究结果,晕。。。

35# techon
if “字符变量” gtr “字符变量”,是纯字符比较
if 字符变量 gtr 字符变量,视变量值的不同,系统会选择采用数字比较或字符比较。

TOP

35# techon


不带引号是数值比较,而带引号则是字符串比较

TOP

本帖最后由 techon 于 2011-5-15 12:47 编辑
32# techon
与我以前做过的 ASCII (码值从 32 到 126) 测试结果不相同, 可否贴出完全测试代码(或发出文件附件避免特殊字符损失)
neorobin 发表于 2011-5-15 10:55


这里还有个问题 就是if 判断的时候 使用
  1. if “字符变量” gtr “字符变量”
  2. if 字符变量 gtr 字符变量
复制代码
带引号和不带引号的排序是不一样, 这个好像跟if 对字符处理的位数有关,究竟是按8位字符处理 还是按16位字符处理还有待研究

TOP

32# techon
与我以前做过的 ASCII (码值从 32 到 126) 测试结果不相同, 可否贴出完全测试代码(或发出文件附件避免特殊字符损失)

TOP

28# plp626


1,在 936代码页 下 ⒉ 是小于 3 的,而在 437代码页下是大于 3 的
2,为什么总记挂着他是单字节还是双字节呢? cmd 中所有字符都是按宽字符处理的
在 cmd 中,以 fgets 函数转换字符串为宽字符 ...
hanyeguxing 发表于 2011-5-13 16:31

寒夜孤星怎么什么都知道...

TOP

返回列表