Applescript - как перебирать треки

Я новичок в applescript. Я пытался узнать его из разных источников, таких как сайт Дуга, macscripter и этот форум

Просто в учебных целях я пытался напечатать на экране все названия треков, используя этот код:

tell application "iTunes"
    set myTracks to (tracks of library playlist 1)
    repeat with aTrack in myTracks
        get name of aTrack
    end repeat
end tell

Но печатает только одно название трека, наверное, последнее ...

Итак, как лучше всего перебирать список?

TIA,

Боб


person Bob Rivers    schedule 02.05.2010    source источник


Ответы (3)


Ваш код в порядке; Причина, по которой кажется, что ничего не происходит, заключается в том, что все, что делает get ..., это ищет значение и возвращает его. Однако вы ничего не делаете с возвращенным значением, поэтому оно игнорируется, и только последняя итерация цикла что-либо возвращает. Вам нужно сделать что-нибудь (что угодно) внутри цикла, которое будет видно внешнему миру: назначить переменной, отобразить диалог, что угодно.

Если вы хотите собрать список названий предметов, вы можете сделать следующее:

tell application "iTunes"
  set trackNames to {}
  repeat with aTrack in tracks of library playlist 1
    set trackNames to trackNames & name of aTrack
  end repeat
end tell

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

tell application "iTunes"
  set trackNames to {}
  repeat with aName in name of tracks of library playlist 1
    set trackNames to trackNames & aName
  end repeat
end tell

Но на этом этапе вам даже не нужен цикл, и вы можете использовать гораздо более простой

tell application "iTunes" to name of tracks of library playlist 1

И в качестве бонуса это будет намного быстрее: в моем быстром тесте три версии заняли 16,189 секунды, 32,656 секунды и 0,296 секунды соответственно.

person Antal Spector-Zabusky    schedule 03.05.2010

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

Я попробовал себя, используя этот скрипт:

tell application "iTunes"
set myTracks to (tracks of library playlist 1)

repeat with i from 1 to number of items in myTracks
    get name of item i of myTracks
end repeat

Это видно в ответах:

  • получить имя файла с идентификатором 4050 дорожки из библиотеки с идентификатором 3379 из исходного кода 41

    --> "Le deserteur"
    
  • получить имя файла с идентификатором 4051 дорожки из библиотеки с идентификатором 3379 из исходного кода 41

    --> "Le lyon est mort ce soir"
    

Также, чтобы убедиться, что это работает, вы можете попробовать следующее:

 tell application "iTunes"
    set myTracks to (tracks of library playlist 1)

    repeat with i from 1 to number of items in myTracks
        display dialog name of item i of myTracks as string
    end repeat

end tell

Итак, это работает, вам нужно только сделать то, что вы хотите сделать, до конца цикла.

Также я бы предложил официальную документацию Apple: Руководство по языку AppleScript. Бесплатно и очень полно для начала.

Надеюсь это поможет !

person Farid    schedule 02.05.2010

Просто хочу добавить, что эти типы сценариев AppleScript все еще работают в MacOS Catalina, но поскольку iTunes был переименован в Music, вам придется изменить tell application "iTunes" на tell application "Music"

person Ben XO    schedule 26.11.2020