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

[文本处理] 批处理将一组文本中多行内容写入新的文本中

假设遇到这样一个情况,这里有上千个文本
在每个文本里面都有这样的一个特殊字词:bathome,而且在这个文本里面这样的这样的字词只存在一处
如:

sadsalklkewr
sdfsdkiwek;la
df3w344
sdf4332

bathome
saymissme
thank you

oiio34230ds
3240230

需要将bathome这一行和下面的2行或者更多行一起存入一个新的文本里,如:
bathome
saymissme
thank you

这上千个文本都是放在同一文件夹内,命名没有关联性,如何用bat语言实现呢?
谢谢大家

[ 本帖最后由 saymissme 于 2008-3-28 23:38 编辑 ]

程序的效率跟 好多情况有关的
所以尽量把你的问题说细致!
或者 公布几个源文件,给大家参考!!

有些信息至关重要,比如:bathome这个词,在每个文件里,行位置相同吗?等等

TOP

用批处理有个问题不懂解决,就是用delims=时,即分隔符为回车符,会将“bathome”那一段落后的空行去掉,于是无法判断是否已经段落结束了。

用VBS倒容易解决。
  1. set fso= createobject("scripting.filesystemobject")
  2. set folder= fso.getfolder(".")
  3. set files=folder.files
  4. set res=fso.opentextfile("result.txt",8,1)
  5. for each file in files
  6. if lcase(fso.getextensionname(file)) = "txt" then
  7. res.write getstr(file)
  8. res.writeline
  9. end if
  10. next
  11. function getstr(a)
  12. flag=false
  13. set t=fso.opentextfile(a)
  14. do until t.atendofstream
  15. s=t.readline
  16. if s="bathome" then
  17. flag=true
  18. end if
  19. if flag=true then
  20. if len(s)<>0 then
  21. getstr=getstr & s & vbcrlf
  22. else
  23. exit do
  24. end if
  25. end if
  26. loop
  27. end function
复制代码
静水流深...

TOP

还有个问题。
bathome 在文档中都是单独占一行,还是在某行中含有bathome
如eutjbathomesd

是都在固定的行?还是不确定的行?

[ 本帖最后由 随风 于 2008-3-29 13:02 编辑 ]
技术问题请到论坛发帖求助!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b *.txt') do (
  3. call :get "%%i"
  4. echo.
  5. )
  6. pause
  7. exit
  8. :get
  9. set flag=false
  10. for /f "tokens=1,2 delims=:" %%j in ('findstr /n .* %1') do (
  11. if "%%k" == "bathome" set flag=true
  12. if "!flag!" == "true" (
  13. if not "%%k" == "" (echo %%k) else goto :eof
  14. )
  15. )
复制代码
静水流深...

TOP

max 为需要的行数。
:
  1. @echo off&setlocal enabledelayedexpansion
  2. set max=2
  3. for /f "delims=" %%i in ('dir /b *.txt') do (
  4.   set "flag="
  5.   for /f "delims=" %%a in ('type "%%i"') do (
  6.      if /i "%%a"=="bathome" set /a flag+=1
  7. if defined flag if !flag! leq !max! >>tmp.txt echo %%a
  8. ))
  9. start tmp.txt
复制代码
技术问题请到论坛发帖求助!

TOP

返回列表