Войти

Показать полную графическую версию : Скопировать телефоны из .VCF


Valek271183
18-05-2015, 11:42
Есть папка с кучей контактов в формате .VCF (Например Вася.VCF, Маша.VCF и т.д.), в каждом из них есть строчка с телефоном начинающаяся с TEL;CELL:89055000000 Можно ли из этой кучи контактов сделать один файлик с Именами и Телефонами с помощью CMD/BAT ?

Iska
18-05-2015, 11:50
Valek271183, упакуйте пару-тройку таких файла в архив, выложите сюда или на RGhost.

Valek271183
18-05-2015, 11:53
Прикрепил
и на http://rghost.ru/7rvkCs7s9

Iska
18-05-2015, 13:37
Valek271183, попробуйте так (на WSH):
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile
Dim objTS

Dim strContent


If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
Set objTS = Nothing

For Each objFile In objFSO.GetFolder(strSourceFolder).Files
If StrComp(objFSO.GetExtensionName(objFile.Name), "vcf", vbTextCompare) = 0 Then
With objFile.OpenAsTextStream()
strContent = .ReadAll()
.Close
End With

With WScript.CreateObject("VBScript.RegExp")
.Pattern = "^BEGIN:VCARD\r\nVERSION:2.1\r\nN;CHARSET=(.*);ENCODING=QUOTED-PRINTABLE:;(.*);;;\r\nTEL;CELL:(.*)\r\n[\s\S]*END:VCARD$"
.MultiLine = True

If .Test(strContent) Then
With .Execute(strContent).Item(0).Submatches
If objTS Is Nothing Then
Set objTS = objFSO.CreateTextFile("Result.txt", True)
End If

objTS.WriteLine QuotedPrintableDecode(Trim(.Item(1)), .Item(0)) & "," & .Item(2) & "," & objFile.Path
End With
Else
WScript.Echo "Can't find Name and Phone in file [" & objFile.Path & "]."
End If
End With
End If
Next

If Not objTS Is Nothing Then
objTS.Close
Set objTS = Nothing
End If
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If
Else
WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source folder>"
WScript.Quit 1
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Function QuotedPrintableDecode(strValue, strCharSet)
With WScript.CreateObject("CDO.Message")
.BodyPart.ContentTransferEncoding = "quoted-printable"

With .BodyPart.GetEncodedContentStream
.charset = "windows-1250"
.WriteText strValue

.Flush
End With

With .BodyPart.GetDecodedContentStream
.CharSet = strCharSet
QuotedPrintableDecode = .ReadText()
End With
End With
End Function
'=============================================================================

Исходная папка задаётся аргументом скрипта (можно просто перетащить папку на скрипт в Проводнике).

Valek271183
18-05-2015, 14:02
Пишет Сценарий не указан, папка с контактами с именем 123 с корне диска С:\ - перетаскиваю её на скрипт и пишет Сценарий не указан

Iska
18-05-2015, 14:27
Пишет Сценарий не указан, »
Сохраняйте код в файл с расширением «.vbs», а не «.wsh».

Valek271183
18-05-2015, 16:18
Пишет ошибку Can't find Name and Phone in file
строка 37 символ 8 недопустимый вызов или аргумент процедуры

Iska
18-05-2015, 16:28
Пишет ошибку Can't find Name and Phone in file »
В каком именно файле пишет?

строка 37 символ 8 недопустимый вызов или аргумент процедуры »
Покажите скриншот или содержимое окна ошибки («Ctrl-C» в окне сообщения об ошибке).

Valek271183
18-05-2015, 16:32
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Text.vbs
Строка: 37
Символ: 8
Ошибка: Недопустимый вызов или аргумент процедуры
Код: 800A0005
Источник: Ошибка выполнения Microsoft VBScript

---------------------------
ОК
---------------------------
это при перетаскивание на Text.vbs

Iska
18-05-2015, 16:35
Давайте уточним: строка 37 — это: «objTS.WriteLine QuotedPrintableDecode(Trim(.Item(1)), .Item(0)) & "," & .Item(2) & "," & objFile.Path», так?

Valek271183
18-05-2015, 16:36
Вот эта вот
objTS.WriteLine QuotedPrintableDecode(Trim(.Item(1)), .Item(0)) & "," & .Item(2) & "," & objFile.Path

Iska
18-05-2015, 18:26
Valek271183, ясно. Смоделировал Вашу ситуацию под Windows 7. Действительно, именно так и есть. Тот же самый код под Windows XP исполняется без проблем.

Буду искать причину.




© OSzone.net 2001-2012