原帖由 wc726842270 于 2010-11-28 02:21 发表
为什么是gtr "99"呢?难道是DEBUG的结果(跟本不了解,只是一时的好奇)
不好意思,打错了,应该是7F。跟debug没有关系,是 ANSI 的编码规则决定的。
通过这个方法,可以统计字符中,中、英文字符的字数:要求 han.txt 文本为 ANSI (GB2312)编码- @echo off&setlocal enabledelayedexpansion&title ANSI 字符分类统计演示_寒夜孤星
- for %%a in (han.txt) do set A=%%~za
- if "%A%"=="" goto:ye
- >nul fsutil file createnew ye.txt %A%
- for /f "skip=1 tokens=3" %%a in ('fc /b /c ye.txt han.txt') do (
- if /i "!gu!" gtr "7D" (
- if /i "!gu!" geq "A1" if /i "!gu!" leq "A9" set/a D+=1
- if /i "!gu!"=="BA" if /i "%%a"=="AE" set/a L+=1
- set/a gu=0,B+=1
- ) else (
- if "%%a" geq "41" if /i "%%a" leq "5A" set/a F+=1
- if "%%a" geq "61" if /i "%%a" leq "7A" set/a G+=1
- if "%%a" geq "30" if "%%a" leq "39" set/a H+=1
- if /i "!gu!"=="0D" if /i "%%a"=="0A" set/a I+=1
- if "%%a"=="22" set/a M+=1
- set gu=%%a
- )
- )
- del /q ye.txt
- :ye
- for %%a in (A B C D E F G H I J K L M) do if not defined %%a set %%a=0
- set/a A-=B+I*2,E=A-B,C=B-D,J=E-F-G-H,K=F+G,"I=(I+1)*^!^!A"
- echo 中文类总计:%B%;汉字:%C%;标点及符号:%D%.
- echo 英文类总计:%E%;字母:%K%;大写:%F%;小写:%G%;数字:%H%;行数:%I%;其它字符:%J%.
- echo 总字数:%A%;汉字"寒":%L%;英文双引号:%M%.
- pause>nul
复制代码 注意:
fc和debug命令能处理的文件大小都是有限制的。由于采用逐字节解析以及fc命令本身的问题,效率很低。
if /i "!gu!"=="BA" if /i "%%a"=="AE" set/a L+=1 是用来统计汉字“寒(BA AE)”出现的次数,可以不要
if /i "%%a"=="22" set/a M+=1 是用来统计英文双引号“"(22)”出现的次数,可以不要
其他的if语句可以根据需要选择
set/a "I=(I+1)*^!^!A" 对变量 I 进行加1运算,如果A为0,则强制 I 也为0
set/a A-=B+I*2 就是 set/a A=A-B-I*2 。
行数统计由 (0D 0A) 计算完成,所以包含空行。
将代码直接复制到文本han.txt中测试,耗时0.15秒
输出结果:
中文类总计:55;汉字:55;标点及符号:0.
英文类总计:1058;字母:388;大写:72;小写:316;数字:31;行数:27;其它字符:639.
总字数:1113;汉字"寒":2;英文双引号:66.
[ 本帖最后由 hanyeguxing 于 2010-11-28 08:12 编辑 ] |