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

[文本处理] [已解决]批处理怎样转换诺基亚的vcf格式的电话号码

2.txt内容如下:
  1. 名: 周XS
  2. 常用电话: 138584023515
  3. 空格一行
  4. 下面又一个联系人
  5. 又空格一行
  6. ……规律的继续
复制代码
我要把txt内容转换成一个个的VCF格式的号码
不知道为什么我上传的vcf用自带的q什么look打开中文的姓和名会乱码,用txt却看不到中文
答案在7楼,那位大大好厉害,我惊叹神啊
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

要求:
1,被转换文本名为test.txt,必须为ANSI编码
2,中间分隔符号为中文冒号
3,第16行的 for /f "tokens=1,2* delims=::        " %%a in 中 delims=后依次为中文冒号、英文冒号以及一个tab制符
  1. @echo off&setlocal enabledelayedexpansion
  2. set k=ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:
  3. set 姓=N;%k%0
  4. set 名=N;%k%0
  5. set 常用移动电话=TEL;CELL:1
  6. set 常用电话=TEL;VOICE:2
  7. set 常用传真=TEL;FAX:3
  8. set 住宅电话=TEL;HOME;VOICE:4
  9. set 昵称=X-NICKNAME;%k%5
  10. set 公司=TITLE;%k%6
  11. set 职位=ORG;%k%7
  12. set 公司电话=TEL;VOICE;WORK:8
  13. set 常用详情=NOTE;%k%9
  14. set 备忘=NOTE;%k%9
  15. (for /f "delims=" %%a in ('more +45^<%~fs0') do echo.%%a)>temp_0.vbs
  16. for /f "tokens=1,2* delims=::        " %%a in ('findstr /n .* "test.txt"') do if "%%b"=="" (call:ye) else if defined %%b (
  17.     if "%%b"=="姓" set m1=%%c
  18.     if "%%b"=="名" set m2=%%c
  19.     set b=!%%b!
  20.     set c=%%c
  21.     if "!b:~-3,1!"=="8" call:gu "!c!"
  22.     for %%d in (!b:~-1!) do if "!n_%%d!"=="" (set n_%%d=!b:~0,-1!!c!) else if defined m1 (set n_%%d=!n_%%d!!c!) else set n_%%d=!c!!n_%%d!
  23. )
  24. del /q temp_*
  25. exit
  26. :ye
  27. (
  28. echo BEGIN:VCARD
  29. echo VERSION:2.1
  30. echo N;%k%!!
  31. for /l %%a in (0,1,9) do if defined n_%%a echo !n_%%a!&set n_%%a=
  32. echo X-CLASS:private
  33. echo END:VCARD
  34. )>"!m1!!m2!.vcf"
  35. set m1=&set m2=
  36. goto:eof
  37. :gu
  38. set/p"=%~1"<nul>temp_1.h
  39. temp_0.vbs temp_1.h>nul
  40. del /q temp_2.h 2>nul
  41. for %%a in (temp_1.h) do >nul fsutil file createnew temp_2.h %%~za
  42. set c=
  43. for /f "skip=4 tokens=2 delims=: " %%a in ('fc /b temp_1.h temp_2.h') do call set c=!c!=%%a
  44. goto:eof
  45. ::vbs
  46. aCode = "GB2312"
  47. bCode = "UTF-8"
  48. Set objArgs = WScript.Arguments
  49. If objArgs.Count=0 Then
  50.     MsgBox "请删除...", vbInformation, "提示"
  51. End If
  52.     For I = 0 To objArgs.Count - 1
  53.         FileUrl = objArgs(I)
  54.         Call CheckCode (FileUrl)
  55.         Call WriteToFile(FileUrl, ReadFile(FileUrl, aCode), bCode)
  56.     Next
  57. Function ReadFile(FileUrl, CharSet)
  58.     Dim Str
  59.     Set stm = CreateObject("Adodb.Stream")
  60.     stm.Type = 2
  61.     stm.mode = 3
  62.     stm.charset = CharSet
  63.     stm.Open
  64.     stm.loadfromfile FileUrl
  65.     Str = stm.readtext
  66.     stm.Close
  67.     Set stm = Nothing
  68.     ReadFile = Str
  69. End Function
  70. Function WriteToFile (FileUrl, Str, CharSet)
  71.     Set stm = CreateObject("Adodb.Stream")
  72.     stm.Type = 2
  73.     stm.mode = 3
  74.     stm.charset = CharSet
  75.     stm.Open
  76.     stm.WriteText Str
  77.     stm.SaveToFile FileUrl, 2
  78.     stm.flush
  79.     stm.Close
  80.     Set stm = Nothing
  81. End Function
  82. Function CheckCode (FileUrl)
  83.     Dim slz
  84.     set slz = CreateObject("Adodb.Stream")
  85.     slz.Type = 1
  86.     slz.Mode = 3
  87.     slz.Open
  88.     slz.Position = 0
  89.     slz.Loadfromfile FileUrl
  90.     Bin=slz.read(2)
  91.     if AscB(MidB(Bin,1,1))=&HEF and AscB(MidB(Bin,2,1))=&HBB Then
  92.        Codes="UTF-8"
  93.        elseif AscB(MidB(Bin,1,1))=&HFF and AscB(MidB(Bin,2,1))=&HFE Then
  94.               Codes="Unicode"
  95.               else
  96.               Codes="GB2312"
  97.     end if
  98.     if not aCode = Codes Then
  99.            MsgBox "文本编码不是ANSI",vbInformation,"错误"
  100.            WScript.Quit
  101.     end if
  102.     slz.Close
  103.     set slz = Nothing
  104. End Function
复制代码

[ 本帖最后由 hanyeguxing 于 2010-12-5 13:30 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 5楼 的帖子

恢复到手机所有的中文成乱码了,有显示手机和手机办公的号码和电话,电话办公的号码。
性变成o一个圈圈圈起来的R,名变成O字母上方有个点,和1一个吗,昵称变成倒转的问号aE1/4。e上面有个^

[ 本帖最后由 shuaige100 于 2010-12-3 15:01 编辑 ]

TOP

  1. BEGIN:VCARD
  2. VERSION:2.1
  3. N:寒;夜
  4. TEL;CELL:15234567890
  5. TEL;CELL;WORK:13423456789
  6. TEL;VOICE:323456789
  7. TEL;VOICE;WORK:223456789
  8. TEL;PAGER:123456789
  9. EMAIL:123@qq.com
  10. TITLE:管理
  11. X-NICKNAME:开始
  12. ORG:斑竹
  13. X-CLASS:private
  14. END:VCARD
复制代码
将以上内容复制到一个文本中,并将文本的扩展名 txt 改成 vcf ,然后看在手机中能否正常显示。
如果正常显示,请按以下方式详细描述以上文本内的所有内容:
TEL;CELL:15234567890
15234567890这个号码在手机中显示的名称是什么?是移动电话,还是常用移动电话?
同时,这个号码如果处于你的txt文本中,则冒号左边的名称是什么?
所有的行都要给予这样的描述。

[ 本帖最后由 hanyeguxing 于 2010-12-3 12:36 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 3楼 的帖子

请更新到顶楼
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

1,楼主列出的用于格式化转换的信息过少
例如楼主提供的2.txt中,姓是指姓名全名还是单指姓?名是指姓名全名还是单指名。冒号左边这些信息是要转化成vCard的类型的,必须要规范,并且要列出冒号左边的各种信息。
(空一行)后是否表示新的一个联系人?


2,楼主提供的vCard样本中:
标识类型“F”的值的编码是“UTF-8”,这是必须的吗?是否允许直接使用字符?
是否会出现ADR类型,ADR类型是否要求有一个对应的LABEL类型?

[ 本帖最后由 hanyeguxing 于 2010-12-2 21:50 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

楼主必须提供标准的vcf样本(所有内容要全),至少提供vcf(是否为2.1版)的版本。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表