标题: [文本处理] 批处理如何计算记事本的字符数(包含空格)? [打印本页]
作者: rsent 时间: 2011-2-21 01:58 标题: 批处理如何计算记事本的字符数(包含空格)?
本人刚学批处理不久,有很多的疑问一直没得到解决,希望大家能帮帮我。在此谢谢大家的阅读!
写blog的时候字符限制在40000,我把文字先复制到记事本里(先去除链接和字体颜色类的设置),再复制word中统计字符,感觉很麻烦,而且不准确。
在word中统计出 28990个字符(包括空格),为什么在blog里还是超出字数限制。我就想做一个批处理直接统计 记事本的字符,看看问题出在哪。
下面一共有40个字符
代码暂时只写到提取出每一行,提取到每一个字(一个汉字算2个字符)- @echo off
- setlocal enabledelayedexpansion
- set num=0
- echo 1234567890>note.txt
- echo qwertyuiop>>note.txt
- echo 批处理之家>>note.txt
- echo $@#$3e97,e>>note.txt
- for /f %%a in (note.txt) do (
- set line=%%a
- for /l %%i in (0,1,100) do (
- for /f "delims= tokens=1,2" %%a in ("!line:~ %%i,1!") do (
- echo %%a%%b>>note1.txt
- )
- )
- )
- for /f %%q in (note1.txt) do (
- set /a num+=1
- echo !num!
- )
- pause
复制代码
我的思路:(已完成项目用红色显示,未完成项目用黑色显示)
1,提取每一行 %%a
2,提取每一个字 %%a%%
3, 总结字数
4,判断是否包括汉字,汉字部分X2,表示2字符
5,总结字符
限于水平,决定先把论坛内教程都看懂再回来琢磨。
最后引用下 bat吧主的“计算字符数” 供大家阅读
-
- @echo off
- set "FileName=%~1"
- if not exist "%FileName%" exit /b 1
- setlocal enabledelayedexpansion
- set /a "LineLength=0"
- set /a "n=0"
- echo 文件:%FileName%
- for /f "usebackq tokens=* delims=" %%i in ("%FileName%") do (
- call :Length "%%i" "LineLength"
- set /a "n+=1"
- echo 第!n!行:!LineLength!。
- )
- if "!n!"=="0" (echo 读取出错。) else (echo 完成,共!n!行。)
- pause>nul
- exit /b 0
-
- :Length
- setlocal enabledelayedexpansion&set /a "_len_=-1"
- set "__str=%~1"
- :__Len_FUNCTION
- set /a "_len_+=1"
- for /f %%i in ("%_len_%") do if not "!__str:~%%i,1!"=="" goto :__Len_FUNCTION
- Endlocal&set "%~2=%_len_%"&goto :EOF
-
- goto :eof
复制代码
[ 本帖最后由 rsent 于 2011-2-22 02:15 编辑 ]
作者: Batcher 时间: 2011-2-21 17:58
用Notepad++打开那些文字,窗口最下方会显示出有多少个字符,你试试这样能否满足blog的条件。
http://bbs.bathome.net/thread-3534-1-1.html
作者: hfg1977 时间: 2011-2-22 18:57
在word中统计出 28990个字符(包括空格),为什么在blog里还是超出字数限制。
这样的话blog是以字节数计算的.回车换行符号是否计数未知.
下面代码假设不计回车换行符号.- if "%1"=="" (set/p "fname=input you file name:") else (set "fname=%~1")
- for /f %%a in ('findstr/n ".*" "%fname%"^|find /c /v ""') do (echo %%a&set linenum=%%a)
- call:setByte "%fname%" linenum
-
- :end
- pause
- exit
- :setByte
- set "fByte=%~z1"
- set /a fByte-=%2*2
- echo %fByte%
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |