Как найти имя файла исполняемого AppleScript - PullRequest
4 голосов
/ 24 апреля 2011

Как мне найти имя исполняющего AppleScript?

ПРИЧИНА: Я хочу создать скрипт, который меняет свое поведение в зависимости от имени файла.Что-то вроде:

if myname is "Joe" then ACTION1
else if myname is "Frank" then ACTION2
else ACTION3

Ответы [ 4 ]

5 голосов
/ 24 апреля 2011

Обычный способ получить имя - использовать «имя меня».Однако яблочные скрипты запускаются яблочным скриптером, поэтому, когда вы используете его в скрипте, в качестве имени вы получаете «Бегущий по яблоку».Если вы скомпилируете свой скрипт как приложение, то будет работать «имя меня».Единственный способ получить имя сценария - получить его путь и извлечь имя.Примерно так будет работать для скриптов ...

getMyName()
tell me to display dialog result

on getMyName()
    set myPath to path to me as text
    if myPath ends with ":" then
        set n to -2
    else
        set n to -1
    end if
    set AppleScript's text item delimiters to ":"
    set myName to text item n of myPath
    if (myName contains ".") then
        set AppleScript's text item delimiters to "."
        set myName to text 1 thru text item -2 of myName
    end if
    set AppleScript's text item delimiters to ""
    return myName
end getMyName
2 голосов
/ 21 сентября 2012

Вот метод, который работает для всех следующих действий:

  • *.scpt файлов (скомпилированные файлы AppleScript; запускаются в AppleScript Editor или с osascript)
  • *.applescript файлов (нескомпилированные файлы AppleScript; запускаются в редакторе AppleScript или с помощью osascript)
  • сценарии командной строки, которые непосредственно содержат AppleScript (помечены как исполняемые и начинающиеся с #!/usr/bin/env osascript):
  • *.app файлы, созданные с помощью AppleScript Editor
  • *.app файлы, созданные с помощью Automator и содержащие действия AppleScript

Примечание. В отличие от этого не работает для следующего:

  • Службы OS X, созданные с помощью Automator, которые содержат действия AppleScript (специальные *.workflow файлы) - всегда сообщают 'WorkflowServiceRunner [.xpc]'
  • универсальные *.workflow файлы, созданные с помощью Automator, которые содержат действия ApplesScript и которые запускаются с automator - всегда сообщает 'Automator Runner [.app]'

Получите имя запущенного скрипта, включая расширение имени файла (.scpt, .app или .applescript, в зависимости от обстоятельств):

tell application "System Events" to set myname to get name of (path to me)

Если вы хотите удалить расширение имени файла с помощью одной команды, используйте следующий подход, основанный на do shell script:

tell application "System Events" to set myname to do shell script "rawName=" & quoted form of (get name of (path to me)) & "; printf '%s' \"${rawName%.*}\""

Вот альтернатива полностью AppleScript, которая является более многословной (хотя и лаконичной по стандартам AppleScript):

tell application "System Events"
    set myname to name of (path to me)
    set extension to name extension of (path to me)
end tell
if length of extension > 0 then
    # Make sure that `text item delimiters` has its default value here.
    set myname to items 1 through -(2 + (length of extension)) of myname as text
end if

Наконец, вот вариант: подпрограмма, которую вы можете вызвать с помощью set myname to getMyName():

on getMyName()
    local myName, tidSaved
    tell application "System Events"
        set myAlias to path to me -- alias to the file/bundle of the running script
        set myName to name of myAlias -- filename with extension, if any.
        if name extension of myAlias is not "" then -- strip away extension
            set {tidSaved, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {""}}
            set myName to items 1 through -(2 + (length of (get name extension of myAlias))) of myName as text
            set AppleScript's text item delimiters to tidSaved
        end if
    end tell
    return myName
end getMyName
0 голосов
/ 04 августа 2015

Может быть это: установить имя приложения в название текущего приложения

0 голосов
/ 12 сентября 2011

Более простой способ определить базовую часть пути - использовать name of:

tell application "Finder"
    set p to path to me
    set nam to name of file p as text
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...