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

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

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

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

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

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

感谢

  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文件夹里。
看得多说得多,远比不上写得多。

TOP

回复 2# weichenxiehou


    很巧妙,赞一个!

TOP

这个我这怎么运行部成功....

TOP

谢谢楼上提醒,已更正。
  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. )
复制代码
看得多说得多,远比不上写得多。

TOP

本帖最后由 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
复制代码

TOP

不还意思,确认晚了(上班时不能上网)

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

不过CrLf  的有点代码还有点不理解,需要进一步学习下

TOP

返回列表