[Automator & AppleScript] Automator: アクション・変数を AppleScript で表現する
さわっている内に、AppleScript でスッキリ書きたくなってきたので、いろいろ調べてみました。
こちらが大変参考になりました。
Contents
変数をセットする
set foo to bar
で代入する。
値は &
で繋げることができる。
set msg to "ピクセルの最大値を指定して下さい。" & return & return & ¬
"入力した数値(px)になるまで、画像の最も長い辺をアスペクト比を保ったまま縮小します。" & return & ¬
"それ以下は縮小しません。"
なにげに以下の細かいところが分からなかった。
スクリプト内で改行する
読みやすくしたいが、改行で意味が変わってしまう。
option + return
でスクリプト内での改行ができる。
表示テキスト内で改行させる
\n
は展開されてしまい、動くけれどもスクリプトが汚いことに。
return
とすればよい。
ダイアログを表示する
returned of
で入力値を受け取れるよう。
tell application "System Events"
display dialog msg as text default answer "400" buttons {"OK", "Cancel"}
set maxpxl to text returned of result
end tell
result
で全てを受けることができる。
エラー処理
try
でひろう。
try
tell application "System Events"
display dialog msg as text default answer "400" buttons {"Cancel", "OK"}
end tell
set maxpxl to text returned of result
on error errMsg number errNo
tell application "System Events"
display alert errMsg & return & "ERROR: " & errNo as warning
end tell
return
end try
キャンセルした場合は、アプリを終了する
cancel もエラー扱い。メッセージとエラー番号がとれる。
return
で、処理が終了できる。以降のスクリプトは実行されない。
が、Automator の処理は止まらないので、エラーナンバーなどを利用してアプリを止める必要がある。
tell me to quit
try
display dialog dialogMsg as text default answer defaultMaxpxl buttons {"Cancel", "OK"}
set maxpxl to text returned of result
on error errMsg number errno
if errno is (-128) then
tell me to quit
else
tell application "System Events"
display alert errMsg & return & "ERROR: " & errno as warning
end tell
end if
return
end try
アプリの起動と終了
tell application "ImageOptim" to activate
delay 5
tell application "ImageOptim"
quit
end tell
起動した後の動かし方がまだ分からない。
新規フォルダを作成する
tell application "Finder"
set p to path to desktop
make new folder at p with properties {name:"ConvertImages"}
end tell
path to desktop
でデスクトップのパスを取得。
フォルダの複製
set srcFolder to alias ((path to desktop folder as text) & "TestFolder")
set destFolder to alias ((path to documents folder as text))
tell application "Finder"
duplicate srcFolder to destFolder
end tell
items of folder (srcFolder)
とすると、フォルダ内のアイテムを複製してくれる。
ファイルを削除する
フォルダ内のアイテムを削除する。
delete (every item of folder destFolder)
フォルダの存在確認はこんな形。
if exists destFolder then
アイテム名を取得する
フォルダ内のアイテム名は、このような形で配列(list)に収めてくれる。
set fileNamelist to list folder destFolder without invisibles
without invisibles
は、.
で始まるファイルを除外してくれる。
アイテムを取得する
名前ではなく、アイテムを扱うために。
as alias list
がポイントみたい。
tell application "Finder" to set elements to input as alias list
return elements
配列から取り出して処理する
配列(list) からひとつずつ取り出して処理する。
repeat with this_file in targetItems
display alert this_file
end repeat
コマンドを実行する
do shell script
で、コマンドラインのコマンドを実行できる。
try
tell application "Finder"
set targetItems to items of folder (destFolder) as alias list
set targetItems to get POSIX path of (targetItems)
set myScript to "open "
end tell
tell application "Terminal"
do shell script myScript & quoted form of targetItems
end tell
on error errMsg number errno
tell application "System Events"
display alert errMsg & return & "ERROR: " & errno as warning
end tell
return
end try
do script
と違い、アクティブにならずにこっそり動いてくれるよう。
シェルを指定して do shell script する。