[AppleScript] ファイルの拡張子を変更するドロップレットを作成する
ドロップレット
ドロップレットとは、そのアイコンにファイルやフォルダをドラッグ&ドロップしてある処理を実行するアプリケーションのことです。
AppleScript では簡単にドロップレットを作成することができます。
今回はファイルの拡張子を変更するドロップレットを作成してみました。
順に解説していきます。
サンプルコード
on open objects display dialog "extenxtion:" default answer "" set extension to text returned of result tell application "Finder" repeat with obj in objects set AppleScript's text item delimiters to "." set nameElements to every text item of (name of obj as string) set lastElementIndex to count nameElements set (item lastElementIndex of nameElements) to extension try set (name of obj) to (nameElements as string) on error display dialog "error" end try end repeat end tell end open
こちらがそのコードです。
ファイルフォーマットを アプリケーション として保存すれば、ドロップレットの完成です。
あるファイル(複数可)を、作成したアプリケーションアイコンにドラッグ&ドロップすると、以下のダイアログが表示されます。
ここで任意の拡張子を入力すると、ドラッグ&ドロップしたファイルの拡張子が入力したものに変わります。
解説
on open objects repeat with obj in objects -- 略 end repeat end open
これがドロップレットの形式です。
on open xxxxx をファイルの先頭に書くと、repeat with obj in xxxxx 内でドラッグ&ドロップされたオブジェクトの各要素に対して操作を実行できます。
xxxxx
の部分には任意の文字列を指定することができます。
display dialog "extenxtion:" default answer "" set extension to text returned of result
ここで拡張子を入力させるダイアログを表示しています。
入力した文字列は text returned of result に格納されるので、それを extension という変数に代入しています。
set AppleScript's text item delimiters to "."
ここで素晴らしいものが出てきました。
AppleScript's text item delimiters です。
AppleScript では以下のような命令が存在します。
- every text item of <文字列>
- <文字列> を設定された文字列ごと分断し、リストに変換する
- <リスト> as string
- <リスト> の各要素を設定された文字列で連結し、一つの文字列に変換する
ここでいう 設定された文字列 というのが AppleScript's text item delimiters なのです。
例えば、AppleScript's text item delimiters を :
と設定し
every text item of "11:22:33:44"
を実行した場合、この結果は
{"11", "22", "33", "44"}
となります。
また、この後 AppleScript's text item delimiters を -
と設定し
{"11", "22", "33", "44"} as string
を実行すると、結果は
11-22-33-44
となります。
非常に便利なものなので覚えておきましょう。
なお、AppleScript's text item delimiters のデフォルト値は 空 です。
サンプルコードでは .
を設定しています。
set nameElements to every text item of (name of obj as string)
ドロップされたファイルのファイル名を .
で分断してリストに変換し、nameElements という変数に代入しています。
set lastElementIndex to count nameElements set (item lastElementIndex of nameElements) to extension
生成したリストの最終要素を入力された拡張子に上書きしています。
ファイル名に複数の .
が含まれている場合を考慮して、このような作りにしてみました。
try set (name of obj) to (nameElements as string) on error display dialog "error" end try
ファイル名の変更を行っています。
同名のファイルが存在する場合やファイル名が長すぎる場合などはエラーとなります。
さいごに
簡単ですが、ドロップレットの説明でした。
AppleScript's text item delimiters はとても便利なので覚えておきましょう。
ファイルに対する決まった操作などはドロップレットを利用して自動化するとよさそうですね。
一方ロシアは
シェルスクリプトを使った。
for filename in ./*.*; do mv $filename ${filename%.*}.extension; done
拡張子を変更したいファイルがあるディレクトリに移動してこのコマンドを実行すると、拡張子が extension
となります。
extension
部分は自由に変更してください。
リンク
ミレニアム・ファルコン製作日記 #46
46 号 表紙
パーツ
成果
今回の作業は以下の 7 つでした。
- パーツを集める
- フレームワークを支える
- 最初の外殻プレートを取り付ける
- 最初の 1/4 を完成させる
- 半円を完成させる
- 機関室エリアを準備する
- 下部外殻プレートの 1 層目を完成させる
今回取り付けたパーツはこちらです。
計 24 枚、多い。
「フレームワークを支える」の作業では 4 本のボルトを仮のスタンドとして外殻フレームに取り付けることが指示されました。
組立作業ではフレームを何度も裏返すため、デリケートな搭乗ランプの装置を保護することが目的です。
ですが、このボルトは自前で用意する必要があり、私は持っていなかったため息子の遊び道具であるトラのサッカーボールで代用しています。
ボルトは近々 Amazon で注文します。
今回の作業で、保管していた外殻プレートのほとんどが本体に取り付けられたので、収納スペースに余裕ができました。
これは良いこと。
作業時間はこれまでで最長、2 時間ほどかかりました。
少し疲れましたがとても楽しかったです。
スター・ウォーズ 反乱者たち シーズン 3
いよいよ今週の日曜日 12/11 13:00 より、反乱者たちのシーズン 3 が始まります。
エズラの成長した姿を期待しましょう。
次週はローグ・ワンが公開されたりと、スター・ウォーズブームが再燃してまいりました!
それではまた次回。
May the Force be with you!