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

[文本处理] (已解决)批处理:vcf格式 ---- 只保留有效号码?

[复制链接]
发表于 2013-9-10 12:53:47 | 显示全部楼层 |阅读模式
本帖最后由 非常感谢 于 2013-9-11 13:27 编辑

批处理前:
a.txt里的内容
2013年9月10日 +861111111111 00:00:00
2013年9月10日 +862222222222 00:00:00
2013年9月10日 +863333333333 00:00:00
合计无效号码数:3个
合计有效号码数:2个

b.vcf内容里有---有对应的上面三个号码
BEGIN:VCARD
VERSION:3.0
N:tianshanyuehua
X-SKYPE-USERNAME:tianshan
TZ:08:00
EMAIL:donghai@outlook.com
X-SKYPE-PROFILE:1
REV:01130911T004132Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+865555555555
X-SKYPE-PSTNNUMBER:+865555555555
REV:01130911T004134Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+864444444444
X-SKYPE-PSTNNUMBER:+864444444444
REV:01130911T004134Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+863333333333
X-SKYPE-PSTNNUMBER:+863333333333
REV:01130911T004134Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+86111111111
X-SKYPE-PSTNNUMBER:+86111111111
REV:01130911T004134Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+862222222222
X-SKYPE-PSTNNUMBER:+862222222222
REV:01130911T004134Z
END:VCARD

批处理后得出,c.vcf文件。就是下面样子。

BEGIN:VCARD
VERSION:3.0
N:tianshanyuehua
X-SKYPE-USERNAME:tianshan
TZ:08:00
EMAIL:donghai@outlook.com
X-SKYPE-PROFILE:1
REV:01130911T004132Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+865555555555
X-SKYPE-PSTNNUMBER:+865555555555
REV:01130911T004134Z
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:+864444444444
X-SKYPE-PSTNNUMBER:+864444444444
REV:01130911T004134Z
END:VCARD
打算把a.txt和b.vcf放一个文件夹里面,不改文件名,批处理后得出文件为:c.vcf

谢谢!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-9-10 16:17:51 | 显示全部楼层
回复 1# 非常感谢

所谓批处理并不是处理一个单一的例子,你的题干都没有描述清楚要解决的问题或者说对象的规律,文本的内容除了那些还有其他么?
发表于 2013-9-10 20:30:34 | 显示全部楼层
我也不知道记事本可以打开不
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=2" %%i in (a.txt) do echo %%i)>c.vcf
  3. findstr /ivg:c.vcf b.vcf >$
  4. (for /f "tokens=*" %%i in ($) do (
  5.         if /i "%%i" == "END:VCARD" if /i "!s!" neq "BEGIN:VCARD" (
  6.                 for %%j in ("!s1!" "!s!" "%%i") do echo;%%~j
  7.                 echo;
  8.         )
  9.         set s1=!s!
  10.         set s=%%i
  11. ))>c.vcf
  12. del $
  13. pause
复制代码
发表于 2013-9-10 20:38:34 | 显示全部楼层
来个gawk吧,略显复杂。

  1. gawk "BEGIN{while(getline<"a.txt">0)arr[$2]=1;RS="";FS="\n"}!(substr($2,index($2,":")+1) in arr){print $0 "\n"}" b.vcf>c.vcf
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-9-10 21:39:49 | 显示全部楼层
回复 5# weichenxiehou

导出的c.vcf是空的。
发表于 2013-9-10 21:43:48 | 显示全部楼层
本帖最后由 weichenxiehou 于 2013-9-10 21:45 编辑

回复 6# 非常感谢
不知你的vcf格式文件是否为文本类型的文件,还有,你确定你的可用路径下有gawk.exe吗?我的测试结果:
e:\test>gawk "BEGIN{while(getline<\"a.txt\">0)arr[$2]=1;RS=\"\";FS=\"\n\"}!(subs
tr($2,index($2,\":\")+1) in arr){print $0 \"\n\"}" b.vcf>c.vcf

e:\test>type c.vcf
BEGIN:VCARD
X-SKYPE-PSTNNUMBER:+864444444444
END:VCARD

BEGIN:VCARD
X-SKYPE-PSTNNUMBER:+865555555555
END:VCARD
 楼主| 发表于 2013-9-10 22:23:03 | 显示全部楼层
回复 8# weichenxiehou

我是在桌面上新建了一个文件夹,在里面放了a.txt,b.vcf,还有您给的代码批处理了一下,不要笑话我哦,gawk.exe怎么做?
发表于 2013-9-10 22:28:06 | 显示全部楼层
回复 10# 非常感谢
gawk.exe不是做的,是要下的,下载下来放到那个目录或%path%包含的任一目录即可。
 楼主| 发表于 2013-9-11 08:53:09 | 显示全部楼层
回复 3# terse
在另外的测试当中出了点状况,主题从新编辑了一下,希望terse有时间的时候帮忙看一下,谢谢~~~!!!
发表于 2013-9-11 11:07:59 | 显示全部楼层
回复 9# 非常感谢
文件小可以批处理处理(不确定你的文件最多有多大)
文件大的话 还是用GAWK吧
发表于 2013-9-11 11:24:30 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=2" %%i in (a.txt) do echo :%%i)>#
  3. (for /f "tokens=*" %%i in (b.vcf) do (
  4.         if /i "%%i" == "END:VCARD" (
  5.                 echo !str! "%%i"&set str=
  6.         ) else set str=!str! "%%i"
  7. ))>$
  8. (for /f "tokens=*" %%i in ('findstr /ivg:# $ ') do (
  9.         for %%j in (%%i) do echo;%%~j
  10.         echo;
  11. ))>c.vcf
  12. del # $
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-9-11 13:27:07 | 显示全部楼层
回复 11# terse
要处理的文件大概不到10k,,,测试成功,,,谢谢了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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