找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25235|回复: 6

[文本处理] BAT脚本如何批量提取TXT的内容且保存到其他路径的文件里?

[复制链接]
发表于 2012-7-2 20:42:34 | 显示全部楼层 |阅读模式

你好。觉得各位版主和很强大,
最近忽然遇到一个问题
希望能帮助一下,不胜感激!

描述:
1.比如下载的的txt 比较多(假设2000个),如附件600819 为样式
2. 由于下载文件太大, 希望提取其中的
【1.基本资料】 和【2.股东变化】 后面的内容,
  并保存到(其他路径) 如D 盘的  的 600819.txt 里

备注说明: 如果是0001 文件,提取后保存到0001, 00050 提取后保存到00050.(路径变化,文件名不变,
  如果可能当然文件名也可以从txt 中取得)

由于可能文件较大。 执行效率也请考虑。

感谢
发表于 2012-7-2 21:27:02 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. md results 2>nul
  3. for /f "delims=" %%i in ('dir/b *.txt') do (
  4.         set flag=
  5.         for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  6.           set "str=%%b"
  7.           if "!str:~,8!"=="【1.基本资料】" set flag=yes
  8.           if "!str:~,8!"=="【2.股东变化】" set flag=yes
  9.           if "!str:~,1!"=="★" set flag=
  10.           if "!str:~,1!"=="☆" set flag=
  11.           if defined flag echo,!str!
  12.         )>"results\%%i"
  13. )
复制代码
保存为bat文件,结果在同目录下的results文件夹里。
发表于 2012-7-2 21:37:05 | 显示全部楼层
回复 2# weichenxiehou


    很巧妙,赞一个!
发表于 2012-7-3 00:03:13 | 显示全部楼层
这个我这怎么运行部成功....
发表于 2012-7-3 00:31:58 | 显示全部楼层
谢谢楼上提醒,已更正。

  1. @echo off&setlocal enabledelayedexpansion
  2. md results 2>nul
  3. for /f "delims=" %%i in ('dir/b *.txt') do (
  4.         set flag=
  5.         (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  6.           set "str=%%b"
  7.           if "!str:~,8!"=="【1.基本资料】" set flag=yes
  8.           if "!str:~,8!"=="【2.股东变化】" set flag=yes
  9.           if "!str:~,1!"=="★" set flag=
  10.           if "!str:~,1!"=="☆" set flag=
  11.           if defined flag echo,!str!
  12.         ))>"results\%%i"
  13. )
复制代码
发表于 2012-7-3 10:19:50 | 显示全部楼层
本帖最后由 CrLf 于 2012-7-3 10:22 编辑
  1. '2>nul&wscript /nologo "/e:vbscript" "%~0"&exit/b
  2. Option Explicit
  3. Dim fso,re,str,a,b,file,f,ret,retpath
  4. Const forread = 1

  5. retpath = "d:\test"

  6. Set re = New RegExp
  7. Set fso = CreateObject("Scripting.FileSystemObject")
  8. If fso.FolderExists(retpath) = False Then
  9.         MsgBox "不存在文件夹:" & retpath
  10.         WScript.Quit
  11. End If

  12. For Each file In fso.GetFolder(".").Files
  13.         If UCase(fso.GetExtensionName(file.Name)) = "TXT" Then
  14.                 IO file.Name
  15.         End If
  16. Next

  17. Sub IO(filename)
  18.         Set file = fso.OpenTextFile(filename,forread)
  19.         f = file.ReadAll
  20.         file.Close
  21.         re_get "【1.基本资料】"
  22.         re_get "【2.股东变化】"
  23.         Set file = fso.CreateTextFile(retpath & filename,forread,True)
  24.         file.Write ret
  25.         file.Close
  26. End Sub

  27. Sub re_get(inpstr)
  28.         re.Pattern = "(" & "[\r|\n]" & inpstr & "[\r|\n][^☆★]*)[☆★]"
  29.         Set str = re.Execute(f)
  30.         If str.Count = 1 Then
  31.                 ret = ret & str.Item(0)
  32.                 ret = Left(ret,Len(ret)-1) & vbNewLine
  33.         End If
  34. End Sub
复制代码
 楼主| 发表于 2012-7-4 17:42:21 | 显示全部楼层
不还意思,确认晚了(上班时不能上网)

非常感谢2位啊,敬仰之情如滔滔江水啊~

不过CrLf  的有点代码还有点不理解,需要进一步学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:15 , Processed in 0.019057 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表