2月 21, 2011
inomoto

AppleScript ミニツール2つご紹介

Inomotoです。初投稿です。
今回は私が業務でよく使っているAppleScriptを二つ紹介します。

1 個別にZip.app
OSXになってから、Finderからcontrol+クリックでファイルをZip圧縮できるようになりました。
ただ、この機能では複数のファイルを選択したときに、まとめて1つのファイルに圧縮されてしまいます。
ときにはたくさんのファイルを一つ一つ個別に圧縮したい場合もありますので、そんなときに役に立つのではと思います。

[applescript]
—————————————
–Drag&Dropしたアイテムを一つずつ処理
—————————————
on open inItems
with timeout of (1 * 60 * 60 * 12) seconds
repeat with tgtItem in inItems
tell application "Finder"
set tgtItem to tgtItem as alias
zipIt(tgtItem) of me
end tell
end repeat
end timeout
end open

—————————————
–エイリアスを渡すとそのアイテムをZIP圧縮するルーチン
—————————————
on zipIt(tgtItem)
tell application "Finder"
–処理対象の名前を取得
set tgtName to name of tgtItem as Unicode text
set tgtName to quoted form of tgtName

–カレントディレクトリを取得
set tgtParent to parent of tgtItem as alias
set tgtParent to quoted form of POSIX path of tgtParent

set zipName to tgtName & ".zip" –zip名

–フォルダの中身を全て階層的に圧縮
do shell script "cd " & tgtParent & " ; " & "zip -r " & zipName & " " & tgtName

end tell
end zipIt
[/applescript]

2 Dropしたファイルを指定したプログラムで処理.app
お客様からいただいたテキストファイルを使用する際、そのまま何もせずに使えることは稀です。大概の場合は何らかの処理が必要になります。
私はそのようなときには大概perlを用いて処理するのですが、perlを使いたい場合はターミナルを開いてコマンドラインから入力しなければならず、私のような面倒くさがりにはちょっと敷居が高い作業です。
このスクリプトをアプリケーション形式で保存すると下記の2手順でperl処理が行えます。
・処理したいファイルをまとめてDrag&Dropする
・どのプログラムで処理するかダイアログで指定
procFileの『do shell script “perl “』の『perl 』の部分を書き換えるとrubyやPHPなどでもできるのかなぁと思っていますが、まだ試していません。

[applescript]
on open inFiles
tell application "Finder"
set progSource to choose file with prompt "プログラムのファイルを選択"
end tell
repeat with tgtFile in inFiles
procFile(progSource, tgtFile) of me
end repeat
activate
display dialog "END" giving up after 2
end open

——————————————————-
–プロセスを呼び出して処理
——————————————————-
on procFile(progSource, tgtFile)
set progSource to quoted form of POSIX path of progSource
set tgtFile to quoted form of POSIX path of tgtFile
do shell script "perl " & progSource & " " & tgtFile
end procFile
[/applescript]

Leave a comment