Board logo

标题: [文本处理] 批处理如何计算记事本的字符数(包含空格)? [打印本页]

作者: rsent    时间: 2011-2-21 01:58     标题: 批处理如何计算记事本的字符数(包含空格)?

本人刚学批处理不久,有很多的疑问一直没得到解决,希望大家能帮帮我。在此谢谢大家的阅读!
    写blog的时候字符限制在40000,我把文字先复制到记事本里(先去除链接和字体颜色类的设置),再复制word中统计字符,感觉很麻烦,而且不准确。
在word中统计出 28990个字符(包括空格),为什么在blog里还是超出字数限制。我就想做一个批处理直接统计 记事本的字符,看看问题出在哪。

下面一共有40个字符
代码暂时只写到提取出每一行,提取到每一个字(一个汉字算2个字符)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set num=0
  4. echo 1234567890>note.txt
  5. echo qwertyuiop>>note.txt
  6. echo 批处理之家>>note.txt
  7. echo $@#$3e97,e>>note.txt
  8. for /f %%a in (note.txt) do (
  9. set line=%%a
  10. for /l %%i in (0,1,100) do (
  11. for /f "delims=  tokens=1,2" %%a in ("!line:~ %%i,1!") do (
  12. echo %%a%%b>>note1.txt
  13. )
  14. )
  15. )
  16. for /f %%q in (note1.txt) do (
  17. set /a num+=1
  18. echo !num!
  19. )
  20. pause
复制代码
我的思路:(已完成项目用红色显示,未完成项目用黑色显示)

1,提取每一行 %%a
2,提取每一个字 %%a%%
3,  总结字数
4,判断是否包括汉字,汉字部分X2,表示2字符
5,总结字符

限于水平,决定先把论坛内教程都看懂再回来琢磨。
最后引用下 bat吧主的“计算字符数”   供大家阅读
  1. @echo off
  2. set "FileName=%~1"
  3. if not exist "%FileName%" exit /b 1
  4. setlocal enabledelayedexpansion
  5. set /a "LineLength=0"
  6. set /a "n=0"
  7. echo 文件:%FileName%
  8. for /f "usebackq tokens=* delims=" %%i in ("%FileName%") do (
  9.      call :Length "%%i" "LineLength"
  10.      set /a "n+=1"
  11.      echo 第!n!行:!LineLength!。
  12. )
  13. if "!n!"=="0" (echo 读取出错。) else (echo 完成,共!n!行。)
  14. pause>nul
  15. exit /b 0
  16. :Length
  17. setlocal enabledelayedexpansion&set /a "_len_=-1"
  18. set "__str=%~1"
  19. :__Len_FUNCTION
  20. set /a "_len_+=1"
  21. for /f %%i in ("%_len_%") do if not "!__str:~%%i,1!"=="" goto :__Len_FUNCTION
  22. Endlocal&set "%~2=%_len_%"&goto :EOF
  23. 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是以字节数计算的.回车换行符号是否计数未知.
下面代码假设不计回车换行符号.
  1. if "%1"=="" (set/p "fname=input you file name:") else (set "fname=%~1")
  2. for /f %%a in ('findstr/n ".*" "%fname%"^|find /c /v ""') do (echo %%a&set linenum=%%a)
  3. call:setByte "%fname%" linenum
  4. :end
  5. pause
  6. exit
  7. :setByte
  8. set "fByte=%~z1"
  9. set /a fByte-=%2*2
  10. echo %fByte%
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2