[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
实验证明只有2 6 10三种方法是正确的,这个if真的是让人头痛。。。
***共同提高***

TOP

15# vsbat

这个还真没注意,注意力集中在思路上了,也没做测试。

但可以挽救。。

TOP

实验证明只有2 6 10三种方法是正确的,这个if真的是让人头痛。。。
batman 发表于 2011-5-12 23:20

6楼的恐怕也不行吧,即使行实用程度也有限,不能输入与系统已有盘符相同的字母的。

TOP

本帖最后由 batman 于 2011-5-13 01:05 编辑

18# yjstone
加个>nul 2>nul就可以了
  1. @echo off
  2. set /p str=请输入:
  3. subst %str%: %cd%>nul 2>nul
  4. cd /d %str%:
  5. for %%a in (%str%) do (
  6.      if "%%~da" equ "%%a:" (
  7.         echo 大写
  8.        ) else (
  9.        echo 小写
  10.      )
  11.      subst /d %%a:>nul 2>nul
  12. )
  13. pause>nul
复制代码
***共同提高***

TOP

我也写一个吧,利用if不加/i参数是区分大小写的。
  1. @echo off
  2. set /p letter=请输入一个字母:
  3. for %%i in (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if "%letter%"=="%%i" echo 小写&pause>nul&exit
  4. echo 大写
  5. pause>nul
复制代码

TOP

再来一个,利用for变量是区分大小写的特点。
  1. @echo off&set str="1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1"
  2. set /p letter=请输入一个字母:
  3. for /f "tokens=1-26 delims=:" %%a in (%str%) do if "%%%letter%"=="1" echo 小写&pause>nul&pause
  4. echo 大写
  5. pause>nul
复制代码

TOP

本帖最后由 hanyeguxing 于 2011-5-13 15:41 编辑

既然已经限定一个字母,那么:
  1. for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set #%%a=%%a
  2. if "A"=="%#A%" (echo;小写) else echo;大写
复制代码
%#A%变量名忽略大小写,变量值则区分;而 if  默认比较是区分大小写的
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 neorobin 于 2011-5-13 03:42 编辑

6楼的代码没必要用 subst
  1. @echo off
  2. set /p c=input:
  3. for %%i in (%c%:) do if %c%:==%%~di (echo UPPER) else echo lower
复制代码
2

评分人数

    • zm900612: 巧妙!技术 + 1
    • plp626: 好好佩服一下。perfect!技术 + 1

TOP

23# neorobin
if 比较时, 字母表次序是这样的:
  1. 43:{a}
  2. 44:{A}
  3. 45:{b}
  4. 46:{B}
  5. 47:{c}
  6. 48:{C}
  7. 49:{d}
  8. 50:{D}
  9. 51:{e}
  10. 52:{E}
  11. 53:{f}
  12. 54:{F}
  13. 55:{g}
  14. 56:{G}
  15. 57:{h}
  16. 58:{H}
  17. 59:{i}
  18. 60:{I}
  19. 61:{j}
  20. 62:{J}
  21. 63:{k}
  22. 64:{K}
  23. 65:{l}
  24. 66:{L}
  25. 67:{m}
  26. 68:{M}
  27. 69:{n}
  28. 70:{N}
  29. 71:{o}
  30. 72:{O}
  31. 73:{p}
  32. 74:{P}
  33. 75:{q}
  34. 76:{Q}
  35. 77:{r}
  36. 78:{R}
  37. 79:{s}
  38. 80:{S}
  39. 81:{t}
  40. 82:{T}
  41. 83:{u}
  42. 84:{U}
  43. 85:{v}
  44. 86:{V}
  45. 87:{w}
  46. 88:{W}
  47. 89:{x}
  48. 90:{X}
  49. 91:{y}
  50. 92:{Y}
  51. 93:{z}
  52. 94:{Z}
复制代码
所以 4 楼, 13 楼, 14 楼不行

TOP

24# neorobin


字符顺序确实如此,if 判断非ascii顺序,自有它的一套规则。

看来四楼那种思路 很难挽救了。。

TOP

本帖最后由 hanyeguxing 于 2011-5-13 18:17 编辑

25# plp626


if [not] string1 compareop string2 command [else expression] 这里 if 执行的是值(含义)比较,值相等时则按扩展顺序(默认小写字母在前、英文在前)决定大小;数字时则直接相等;含义的扩展,则由代码页决定。
所以不同代码页下比较的结果很可能是不同的,而我们通常所说的比较结果实际是英文437内核简体中文936扩展下的比较结果,例如:
  1. if ⒉ lss 3 (echo 1) else echo;2
  2. pause&chcp 850 >nul
  3. if ⒉ lss 3 (echo 3) else echo;4
  4. pause
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

6楼的代码没必要用 subst@echo off
set /p c=input:
for %%i in (%c% do if %c%:==%%~di (echo UPPER) else echo lower
neorobin 发表于 2011-5-13 03:27

曾以为,自己差不多勉强有技术组水平了,但是老兄用代码对我说:你丫夜郎自大...
再次膜拜一下neorobin

TOP

26# hanyeguxing
  1. ⒉ 不是2.
复制代码
没错。

不过,我差点被你忽悠了。

你那个⒉ 是双字节字符,确切的内在机制或者规则还望大家研究下。

TOP

本帖最后由 hanyeguxing 于 2011-5-13 16:39 编辑

28# plp626


1,在 936代码页 下 ⒉ 是小于 3 的,而在 437代码页下是大于 3 的
2,为什么总记挂着他是单字节还是双字节呢? cmd 中所有字符都是按宽字符处理的
在 cmd 中,以 fgets 函数转换字符串为宽字符;然后:
wcscmp 比较两个宽字符串(宽字符)
wcsncmp 类似于wcscmp(), 还要指定比较字符字符串的数目(宽字符)
iswspace 测试字符是否是空白符号(宽字符)
iswdigit 测试字符是否为数字(宽字符)
iswxdigit 测试字符是否是十六进制的数字(宽字符)
iswalpha 测试字符是否是字母(宽字符)
towlower 把字符转换为小写(宽字符)
towupper 把字符转换为大写(宽字符)
wcslen 获得宽字符串的数目(宽字符)
wcstol 把宽字符的初始部分转换为长整数(宽字符)
wcstoul 把宽字符的初始部分转换为无符号长整数(宽字符)
wcsstr 在一字符串中查找另一字符串第一次出现的位置(宽字符)
wcscat 把一个字符串接到另一个字符串的尾部(宽字符)
wcsrchr 从尾部开始查找子字符串出现的第一个位置(宽字符)
swprintf 根据vararg参量表格式化成字符串(宽字符)
wcscpy 拷贝字符串(宽字符)
wcsncpy 类似于wcscpy(), 同时指定拷贝的数目(宽字符)
wcschr 查找子字符串的第一个位置(宽字符)
wcsspn 返回包含第二个字符串的初始数目(宽字符)
还有很多。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

29# hanyeguxing

很专业似的。我也没考证过。

你能得到这些,那给个宽字符顺序表?

65535个字符

不知如何比较呢? 内在机制到底是怎样的?

比如任给两个字符,汉字,怎么通过winhex比较他俩在cmd下if 判断的大小顺序,chcp437代码页下又是怎么样的?

TOP

返回列表