Board logo

标题: [文本处理] 批处理如何将VCF通讯录转成XLS通讯录? [打印本页]

作者: sirliu    时间: 2013-7-28 00:41     标题: 批处理如何将VCF通讯录转成XLS通讯录?

vcf通讯录的内容如下:
BEGIN:VCARD
N:爱;爸;;;;;;
FN:爱爸
TEL;CELL:13787115555
VERSION:3.0
UID:988c4aef09584b2e950c01a044378898
REV:20130727
END:VCARD
BEGIN:VCARD
N:爱;妈;;;;;;
FN:爱妈
TEL;CELL:18777777742
VERSION:3.0
UID:92236076f574462ab012fb57099f5262
REV:20130727
END:VCARD
BEGIN:VCARD
N:爸;爸;;;;;;
FN:爸爸
TEL;CELL:13907317540
VERSION:3.0
UID:66e7a3dce5cc4610950eea2ad2275cda
REV:20130727
END:VCARD
BEGIN:VCARD
N:波;哥;;;;;;
FN:波哥
TEL;CELL:15487118650
VERSION:3.0
UID:6f44decc1f9d44cc8a21ecbf4348047d
REV:20130727
END:VCARD

我想实现用Excel打开后是下面的样子
我试着将vcf通讯录先粗处理,提取出姓名和电话号码的行。
  1. findstr /i "fn tel" 通讯录.vcf>通讯录.txt
复制代码
然后用for命令冒号“:"提取每行第二列字符,即姓名和电话号码,
但是姓名和电话不在同一行,且必须在姓名和电话之间加制表符或分号才能使Excel打开后自动分列,不知道该如何处理,请高手赐教。
作者: CrLf    时间: 2013-7-28 02:06

这个用 sed 最合适了:
  1. sed "s/.*://;N;s/\n.*:/;/" 通讯录.txt>通讯录.xls
复制代码
纯批比较繁琐点:
  1. @echo off
  2. (for /f "tokens=1* delims=:" %%a in (通讯录.txt) do (
  3.   if defined str (
  4.     echo !str!;%%b
  5.     endlocal&set "str="
  6.   ) else (
  7.     set str=%%b
  8.     setlocal enabledelayedexpansion
  9.   )
  10. ))>通讯录.xls
复制代码

作者: 523066680    时间: 2013-7-28 07:50

有些VCF通讯录的联系人名称是UTF-8 编码。非明文。

like this
BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=85=B0=E6=A0=BC;=E8=82=96;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=85=B0=E6=A0=BC=20=E8=82=96
TEL;VOICEREF:1-352-013-0000
END:VCARD
作者: sirliu    时间: 2013-7-28 11:26

回复 2# CrLf


    不能执行啊,for命令前有括号,最后的“))>通讯录.xls”怎么理解?
作者: sirliu    时间: 2013-7-28 11:27

回复 3# 523066680


    用一款叫VCFEncoding的软件转过来。
作者: CrLf    时间: 2013-7-28 17:02

回复 4# sirliu


    本地测试无误,请把你的 通讯录.txt 打包作为附件发上来看看




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