Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Скопировать телефоны из .VCF (http://forum.oszone.net/showthread.php?t=299935)

Valek271183 18-05-2015 11:42 2508628

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

Iska 18-05-2015 11:50 2508632

Valek271183, упакуйте пару-тройку таких файла в архив, выложите сюда или на RGhost.

Valek271183 18-05-2015 11:53 2508636

Прикрепил
и на http://rghost.ru/7rvkCs7s9

Iska 18-05-2015 13:37 2508676

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 2508681

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

Iska 18-05-2015 14:27 2508689

Цитата:

Цитата Valek271183
Пишет Сценарий не указан, »

Сохраняйте код в файл с расширением «.vbs», а не «.wsh».

Valek271183 18-05-2015 16:18 2508711

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

Iska 18-05-2015 16:28 2508716

Цитата:

Цитата Valek271183
Пишет ошибку Can't find Name and Phone in file »

В каком именно файле пишет?

Цитата:

Цитата Valek271183
строка 37 символ 8 недопустимый вызов или аргумент процедуры »

Покажите скриншот или содержимое окна ошибки («Ctrl-C» в окне сообщения об ошибке).

Valek271183 18-05-2015 16:32 2508719

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

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

Iska 18-05-2015 16:35 2508720

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

Valek271183 18-05-2015 16:36 2508721

Вот эта вот
objTS.WriteLine QuotedPrintableDecode(Trim(.Item(1)), .Item(0)) & "," & .Item(2) & "," & objFile.Path

Iska 18-05-2015 18:26 2508765

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

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


Время: 01:04.

Время: 01:04.
© OSzone.net 2001-