2016-01-04 6 views
0

Я случайно добавил около 600 контактов в свой адресный адрес Mac с iPhone друга. Я синхронизировал свой Mac несколько недель назад. К сожалению, у меня нет резервной копии моих контактов, и теперь все они синхронизированы с моим iPhone и iCloud. Я смог экспортировать все нежелательные контакты в виде файлов «.vcf» из моего телефона друзей, поэтому у меня есть около 600 файлов, таких как «John Doe.vcf», а также простой текстовый список только имен контактов.Applescript для удаления контактов из списка

В идеале мне нужен сценарий, который соответствует данным внутри файла VCF, чтобы убедиться, что я удаляю правильный контакт.

Идея # 2 будет удалить контакты, который соответствует имени в списке, пропуская поиски, которые возвращают два или больше результатов (таким образом я не потерять свои контакты с таким же именем, как и мой друг)

I начиная с attempint, чтобы удалить один контакт, используя следующий applescript, но не повезло. Пожалуйста помоги!

set daName to "John Doe" 

tell application "Contacts" 
    repeat with onePerson in people 
     if (value of name of onePerson) is daName then 
      delete onePerson 
     end if 
    end repeat 
end tell 

--UPDATE--

Вот окончательный код, который я использовал для выполнения этой задачи. Я добавил цикл вверху, который циклически перебирает список имен, скопированных в буфер обмена. Я также добавил имя дублированного контакта в диалоговом окне, чтобы я мог принять к сведению его.

Советы:

  • Сделать резервную копию всех ваших контактов перед запуском сценария.
  • Если вы хотите, чтобы количество контактов «магически» уменьшалось во время запуска скрипта, прокрутите вниз до ваших контактов в вашей адресной книге, и вы увидите количество контактов .

ЗАВЕРШЕНИЕ КОД

set the clipboard to (the clipboard as text) 
set the_strings to the clipboard 

repeat with this_string in paragraphs of the_strings 
    set daName to this_string 
    DeleteContact(daName) 
end repeat 


on DeleteContact(theName) 
    tell application "Contacts" 
     set myList to every person whose name is theName 
     set Nb to count of myList 
     if Nb = 0 then return -- no record found 
     if Nb > 1 then 
      display dialog theName & " (too many found: do nothing)" 
     else 
      set myperson to item 1 of myList -- only 1 found to be deleted 
      delete myperson 
      save 
     end if 
    end tell 
end DeleteContact 

ответ

0

Рев скрипт содержит подпрограмму, которая проверить имя и удалить. Я добавил несколько комментариев, чтобы упростить адаптацию для ваших нужд: вы можете создать цикл, который ищет вашу карту, и вызвать подпрограмму DeleteContact.

set daName to "John Doe" 
DeleteContact(daName) 


on DeleteContact(theName) 
tell application "Contacts" 
    set myList to every person whose name is theName 
    set Nb to count of myList 
    if Nb = 0 then return -- no record found 
    if Nb > 1 then 
     display dialog "too many found: do nothing" 
    else 
     set myperson to item 1 of myList -- only 1 found to be deleted 
     delete myperson 
     save 
    end if 
end tell 
end DeleteContact 

В случае, если такое же имя существует в нескольких контактах, я показываю диалог, но вам решать, что делать здесь.

+0

Спасибо PBELL !! Это решило мою проблему и сэкономило много часов на очистке моих контактов вручную. Я внес некоторые небольшие изменения в код, я отправлю их, чтобы помочь кому-то еще в той же ситуации. – Gio

0

Gio

Это скрипт, я имел и это может решить вашу проблему, хотя вы никогда не говорили, что проблема была.

tell application "Contacts" 
    local results,dlist,dloop 
    set results to {} 
    set dlist to people whose (first name contains "Oxnard" or (last name is equal to "Abercrombe")) 
    repeat with dloop in dlist 
    delete dloop 
    end repeat 
    set end of results to "Records deleted :" & count of dlist 
    save 
return results 
end tell 

Обратите внимание, что контакты словарь делает определение name свойства, однако он будет на основе настроек предпочтений.