找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25908|回复: 5

[数值计算] 批处理 字符计算 最终版 [Raymai97作品]

[复制链接]
发表于 2011-12-13 12:49:41 | 显示全部楼层 |阅读模式
昨天花了点时间整理下,做了个 批处理字符计算,里面附了关于这方面的知识,方便以后的新手查看使用

可以分析出多少个:
* 中文字
* 英文字
* 数字(全角+半角)
* 空格与符号(全角+半角)

代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title 批处理 字符计算 最终版 [Raymai97作品]
  4. color 0f
  5. mode con cols=80 lines=25
  6. :menu
  7. set sel=&cls
  8. echo,
  9. echo,    // 批处理 字符计算 最终版【支持英文、中文、数字、符号】 by Raymai97 //
  10. echo,
  11. echo,   请选择:
  12. echo,
  13. echo, 1 小麦(raymai97)在这方面研究所得的珍藏知识
  14. echo,
  15. echo, 2 使用 批处理字符计算器 【小麦原创】
  16. echo,
  17. echo, 3 批处理论坛 bbs.bathome.net
  18. echo,
  19. echo, Q 退出
  20. echo,
  21. set /p sel=^>
  22. if "!sel!"=="1" goto maidata
  23. if "!sel!"=="2" goto textcalc
  24. if "!sel!"=="3" start "" "http://bbs.bathome.net/"
  25. if "!sel!"=="Q" exit
  26. goto menu
  27. :maidata
  28. set sel=&cls
  29. echo,
  30. echo,  // 妙用if,区别并计算字符 //
  31. echo,
  32. echo,  set a=(某一个字符)
  33. echo,
  34. echo,  当 %%a%% lss "a" 就是 全角 或 半角 的 符号、空格 或 数字 else 就是 英文字
  35. echo,
  36. echo,  当 %%a%% gtr "Z" 就是 中文字
  37. echo,
  38. echo,  当 %%a%% lss "0" 就是 全角 或 半角 的 符号、空格 else 就是 全角 或 半角 的 数字
  39. echo,
  40. echo,  以上为批处理检测的思路,可能有点复杂,简单点的分析:
  41. echo,
  42. echo,  a-Z = 英文字                                        // 注意 //
  43. echo,
  44. echo,  多过 Z = 中文字                             / 批处理必须一个一个分析 /
  45. echo,
  46. echo,  0-9 = 全角 或 半角 的数字
  47. echo,
  48. echo,  少过 0 = 全角 或 半角 的符号、空格
  49. echo, --------------------------------------------------------------------------
  50. echo,  1 如果要区别 全角 和 半角 的符号、数字 和 空格            2 返回主菜单
  51. echo,
  52. set /p sel=^>
  53. if "!sel!"=="1" goto maidata2
  54. if "!sel!"=="2" goto menu
  55. goto maidata
  56. :maidata2
  57. set sel=&cls
  58. echo,
  59. echo,  // 如果要区别 全角 和 半角 的符号、数字 和 空格 //
  60. echo,
  61. echo,  请看看这段东西:
  62. echo,
  63. echo,  if "1" gtr "1" (echo yes) else (echo no)
  64. echo,  yes
  65. echo,  if "1" gtr "2" (echo yes) else (echo no)
  66. echo,  no
  67. echo,  if "," gtr "2" (echo yes) else (echo no)
  68. echo,  no
  69. echo,
  70. echo,  这段东西是我在cmd里测试得到的东西(已echo off),从上面可以看出:
  71. echo,
  72. echo,  全角的1大过 半角的 1  但 小过 半角的 2
  73. echo,
  74. echo,  全角的,大过 半角的 ,  但 小过 半角的 2
  75. echo,
  76. echo,  看到这里,不用我多说,你也大概能猜出要如何区别,并感到失望
  77. echo,
  78. echo, --------------------------------------------------------------------------
  79. echo,  1 返回主菜单
  80. echo,
  81. set /p sel=^>
  82. if "!sel!"=="1" goto menu
  83. goto maidata2
  84. :textcalc
  85. cls
  86. set text=
  87. set /a len=0,sym=0,en=0,ch=0,num=0
  88. echo,  // 批处理字符计算器 12月12日完成 by Raymai97 //
  89. echo,
  90. set /p text=请输入:
  91. echo,
  92. echo,  // 计算中 //
  93. if "!text!"=="" goto result
  94. :loop
  95. if "!text:~%len%!"=="" goto result
  96. if "!text:~%len%,1!" gtr "Z" (set /a ch+=1) else (
  97. if "!text:~%len%,1!" geq "a" (set /a en+=1) else (
  98. if "!text:~%len%,1!" lss "0" (set /a sym+=1) else (
  99. set /a num+=1)))
  100. set /a len+=1
  101. goto loop
  102. :result
  103. echo,
  104. echo,  // 结果 //
  105. echo,
  106. echo,  全角/半角英文字:!en!     中文字:!ch!
  107. echo,  
  108. echo,  全角/半角数字:  !num!     全角/半角符号或空格:!sym!
  109. echo,
  110. echo,  总计:!len!
  111. echo,
  112. echo,  // 任意键继续 //
  113. pause>nul
  114. goto textcalc
复制代码
发表于 2011-12-14 11:22:52 | 显示全部楼层
// 计算中 //11:18:09.79

  // 结果 //11:18:36.50

  全角/半角英文字:214     中文字:90

  全角/半角数字:  108     全角/半角符号或空格:609

  总计:1021


你的弟弟来挺你啦~
不错嘛~

可是用折半法(虽然没计算 半角/全角 等字符)

11:21:20.29
1021
11:21:20.51

超快的啊!!
 楼主| 发表于 2011-12-14 11:40:20 | 显示全部楼层
回复 2# garyng


的确快,不过后来我还是觉得我的有优点,因为折半法的不是每个每个判断,算不到4种字符~
发表于 2011-12-14 15:26:13 | 显示全部楼层
回复 3# raymai97


    如果配合变量替换就可以,哈哈。
  1. ::计算字符串原始长度为 len1
  2. for /l (0 1 9) do set str=!str:%%a=!
  3. ::计算字符串排除数字后的长度为 len2
  4. set /a 数字=len1-len2
  5. for /l (a b c d e f g 等等...) do set str=!str:%%a=!
  6. ::计算字符串排除数字后的长度为 len3
  7. set /a 字母=len2-len3
  8. ::依此类推
复制代码
发表于 2011-12-15 17:13:45 | 显示全部楼层
LZ还是把心思放在正经的学习上吧,你真的却认你一直在进步么?
 楼主| 发表于 2011-12-15 23:54:33 | 显示全部楼层
回复 5# wc726842270


好吧,我其实现在转学vb.net了,这个批处理做来是为了让方便以后查询~
现在批处理只是有空玩玩~ 基本很少玩了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:18 , Processed in 0.018502 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表