[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [分享]批处理计算字符串长度和重复次数

以前写一个与智能有关的东东,需要判断字符串的长度,那时候头晕脑胀的,有想法但写不出来,借鉴人家的又无法理解透彻。今天想弄一个计算词语重复次数的代码,原以为 “find /c”或者“findstr *”能解决问题,结果发现前者有缺陷后者又难以理解。
下面贡献的代码是一段处理字符串时常用的代码,它最基本的功能就是将文本和字符串拆解成单独的字符,一个字符一行,便于你对单独的字词进行编辑
基本代码如下
  1. @echo off
  2. set /p inf=请输入字符串或文本路径(不包括空格):
  3. if %inf:~-3,3%==txt (set inf=%inf%) else (set inf="%inf%")
  4. setlocal enabledelayedexpansion
  5. for /f %%i in (!inf!) do (
  6. set var=%%i
  7. for /l %%a in (0,1,100) do (
  8. set str=!var:~%%a,1!
  9. if defined str echo !str!&&set ddr=%%a&set /a ddl=!ddr!+1
  10. )
  11. )&echo 字符串长度是:!ddl!
  12. pause>nul
复制代码

该代码可以实现以下功能:
1、单字、竖排、拼接字符串
2、计算字符串长度
需要注意的是:
1、不处理空格,空格后面的内容被忽略。你可以使用其它命令过滤空格,比如for,具体方法我一直模糊。
2、数字“for /l ”设置的长度是100,不懂有无其它限制。
下面对该代码进行小小的改动可以用以统计重复字符,如下:
  1. @echo off
  2. :loop
  3. set /p inf=请输入字符串或文本路径(不包括空格):
  4. if %inf:~-3,3%==txt (set inf=%inf%) else (set inf="%inf%")
  5. setlocal enabledelayedexpansion
  6. for /f %%i in (!inf!) do (
  7. set var=%%i
  8. for /l %%a in (0,1,30) do (
  9. set str=!var:~%%a,1!
  10. if defined str echo !str!>>_cfjs.txt&&set ddr=%%a&set /a ddl=!ddr!+1
  11. )
  12. )&echo 字符串长度是:!ddl!
  13. set /p cfc=输入需要查找的字符:
  14. for /f "tokens=2 delims=:" %%m in ('find /c  "!cfc!"  _cfjs.txt') do echo 该字符重复次数为:%%m 次
  15. del _cfjs.txt
  16. echo.
  17. pause
  18. cls
  19. goto loop
复制代码

由于是单字处理,不支持统计两个字以上的词语,只支持单个的汉字、字母和标点符号

该代码是基础代码,可惜没人关心。
经过修改,可以实现提取指定字符串,进一步可以提取文本中任意字符前后的内容。
以下用以提取字符串“txt”,该代码用于将多个文本文件拖曳进批处理后同时获取这几个文本文件的路径名,也可以用以提取一个文本内容中含有“txt”的路径名
可以修改“txt”为“exe”等后缀名,用以扑捉其它文件路径名。
有一定的限制,比如部分空格问题,可以考虑去掉“.%~dp0\”。以及效率偏低,有待完善。
  1. @echo off
  2. echo %*>>%~dp0\_2tyxs.txt
  3. echo.>%~dp0\_test2.txt
  4. setlocal enabledelayedexpansion
  5. for /f "tokens=*" %%i in (%~dp0\_2tyxs.txt) do (
  6. set var=%%i
  7. for /l %%a in (0,1,1000) do (
  8. set /a ddl=%%a-1
  9. set str2=!var:~%%a,2!
  10. if "!str2!"==":\" call echo %%var:~!ddl!,1%%!var:~%%a,1000!>>%~dp0\_test1.txt
  11. )
  12. )
  13. for /f "tokens=*"  %%i in (=%~dp0\_test1.txt) do (
  14. set var=%%i
  15. for /l %%a in (0,1,1000) do (
  16. set /a ddf=%%a+4
  17. set str=!var:~%%a,4!
  18. if "!str!"==".txt" echo !var:~0,%%a!.txt>>%~dp0\_test2.txt
  19. )
  20. )
  21. del %~dp0\_test1.txt,%~dp0\_2tyxs.txt
  22. for /f "tokens=1,2,3,4 delims=." %%a in (%~dp0\_test2.txt) do (
  23. set vara=%%a
  24. set varb=%%b
  25. set varcc=!varc:~0,1!"
  26. if /i "!varb:~0,3!"=="txt" echo !vara!.!varb:~0,3!>>%~dp0\_test3.txt
  27. )
  28. _results.txt
  29. for /f "delims=" %%a in ('sort %~dp0\_test3.txt') do (
  30. if not %%a equ !b! echo %%a>>%~dp0\_results.txt
  31. set b=%%a)
  32. del %~dp0\_test3.txt,%~dp0\_test2.txt
  33. start "" %~dp0\_results.txt
  34. EXIT
复制代码

[ 本帖最后由 cjiabing 于 2010-8-20 22:29 编辑 ]

TOP

返回列表