Board logo

标题: [文本处理] [已解决]批处理如何提取文本里两个指定字符串/关键字之间的内容 [打印本页]

作者: sirliu    时间: 2012-7-23 18:31     标题: [已解决]批处理如何提取文本里两个指定字符串/关键字之间的内容

本帖最后由 pcl_test 于 2017-4-22 14:11 编辑

批处理如何按空行分割文本到多个文件?分割VCF联系人
问题是这样的,本人换了个老手机,老手机联系人导入只支持一个联系人一个文件,而现在我手头上的是多个联系人一个文件,现在要把这个单个文件分割成多个,以便供老手机导入。
要求将每个BEGIN:VCARD到END:VCARD提取出来单独存放为一个文件,文件名随便,只要不重复就行,当然,如果能够将联系人姓名转换出来作为文件名更好。
  1. BEGIN:VCARD
  2. VERSION:2.1
  3. N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=张三;;;
  4. FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=张三
  5. TEL;CELL:13466545261
  6. END:VCARD
  7. BEGIN:VCARD
  8. VERSION:2.1
  9. N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=李四;;;
  10. FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=李四;
  11. TEL;CELL:15885394277
  12. EMAIL;PREF;INTERNET:74235661237@qq.com
  13. ORG;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=其他
  14. END:VCARD
  15. BEGIN:VCARD
  16. VERSION:2.1
  17. N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=王五;;;
  18. FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=王五
  19. TEL;CELL:13337322552
  20. EMAIL;PREF;INTERNET:2327@qq.com
  21. ORG;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=其他
  22. END:VCARD
复制代码
我的思路是先对将“END:VCARD”与“BEGIN:VCARD”之间插入空行(如下),方便处理。
  1. ……
  2. END:VCARD
  3. BEGIN:VCARD
  4. ……
复制代码
到此我就不会了,还望各位不吝赐教。
作者: apang    时间: 2012-7-23 20:03

本帖最后由 apang 于 2012-7-23 20:11 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=1
  3. for /f "delims=" %%a in (1.txt) do (
  4.   echo %%a>>Name!n!.txt
  5.   if /i "%%a"=="END:VCARD" set/a n+=1
  6. )
  7. pause
复制代码

作者: poter    时间: 2012-7-23 20:56

回复 2# apang
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f "tokens=*" %%i in (1.txt) do (
  4. if "%%i"=="BEGIN:VCARD" (
  5. set kaiguan=1
  6. set /a count+=1
  7. )
  8. if !kaiguan!==1 echo %%i>>a!count!.txt
  9. if "%%i"=="END:VCARD" (
  10. set kaiguan=0
  11. )
  12. )
复制代码

作者: sirliu    时间: 2012-7-23 21:34

回复 2# apang


    很简洁啊
但是不知道思路~~只能崇拜了~
作者: tbjx138    时间: 2014-11-27 13:44

这个代码怎样修改。才能够将联系人姓名转换出来作为文件名?请大神帮忙!谢谢!
作者: apang    时间: 2014-11-27 20:51

回复 5# tbjx138


    或许可以这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.   echo,%%a>>$
  4.   for /f "tokens=1,4 delims==" %%b in ("%%a") do (
  5.     if /i "%%b" == "N;CHARSET" set "Name=%%c"
  6.   )
  7.   if /i "%%a"=="END:VCARD" move $ "!Name:;=!.txt"
  8. )
  9. pause
复制代码

作者: tbjx138    时间: 2014-11-28 12:24

感谢apang大神的回复!!!测试成功!!
作者: LMY1967    时间: 2018-10-21 15:47

根据字符。拆分成多个文本文件
作者: win.BAT    时间: 2019-12-23 21:21

                       .......
作者: win.BAT    时间: 2019-12-23 21:22

.........:victory:




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