Вот метод, который работает для всех следующих действий:
*.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