Top > おぼえたこと > AppleScript編

リネーム

概要

リネームはドラッグ&ドロップの項でも単純なものを載せましたが、いろいろなパターンがあって全てに対応できるようにすると、GUIの部分、つまり作業者が簡単にいろいろなパターンのものを設定しやすくならなければなりません。
FaceSpanというAppeScriptのGUIを作る別ソフトなどを使えば別ですが、残念ながらAppleScriptだけではとても使いやすいものが作ることはできません。

OS X環境ならばXcodeという開発環境が無償で提供されており、GUIを含めいろいろな事が出来ますが、Classic環境では残念ながら動かす事は出来ません。
また、RealbasicでもAppleScriptを利用する事が出来、私自身の作成したものもほとんどがRealbasicとAppleScriptの連携で行われています。

拡張子追加

ここでは、AppleScriptの勉強に的を絞り、AppleScriptだけで出来る事を掲載して行きます。

まずは下記のスクリプトを記述して、アプリケーション形式で保存をしてみて下さい。その際に、「初期画面を表示しない」にチェックを入れるのを忘れないで下さい。

このままコピーしてテキストエディタに貼り込み、よけいなものがついていないか確認してからもう一度テキストエディタの文字をコピーしスクリプトエディタにペーストすると、そのまま保存して使えると思います。

property appliList : {"自分で入力する。", "テキスト", "Illustrator", "Photoshop", "EXcel", "Word", "PowerPoint", "EPSF", "TIFF", "JPEG"}
property kakutyoushiList : {"", ".txt", ".ai", ".psd", ".xls", ".doc", ".ppt", ".eps", ".tif", ".jpg"}

on open dorp_Items
tell application "Finder"
choose from list appliList with prompt "追加する拡張子を選択して下さい。" default items "自分で入力する。"
set res to result
if res is not false then
if res as string is "自分で入力する。" then
display dialog "追加する拡張子をピリオドを含め記入して下さい。" default answer "" buttons {"キャンセル", "OK"} default button 2 with icon note
set kakutyoushi to text returned of result
else
set I to 1
repeat with obj in appliList
if obj as string = res as string then
set kakutyoushi to item I of kakutyoushiList
exit repeat
end if
set I to I + 1
end repeat
end if
repeat with obj in dorp_Items
set name of obj to ((name of obj) as string) & kakutyoushi
end repeat
end if
end tell
end open

Download: 拡張子変更スクリプト(Classic用)

アプリケーション形式で保存してファイルをドラッグ&ドロップすると、図のようなダイアログが出てきます。

拡張子追加ダイアログ

「自分で入力する。」を選択すると、好きな拡張子を指定できます。
それ以外のものを選択すると、その項目にあった拡張子が追加されます。

●スクリプトの流れ

property appliList : {"自分で入力する。", "テキスト", ・・・・}

property 変数名 : 値

1,2行名に書かれているのは、初期設定値です。
あらかじめ用意した値となります。
プログラムの中で、set appliList to {"自分で入力する。", "テキスト", ・・・・}と書いても同じ事ではあるのですが、紹介する為にもここで使っています。

と、言うのもpropertyは初期値をアプリケーションになった後でも変更する事が可能だからです。
拡張子追加スクリプトでは実装していませんが、簡単な使い方をお教えします。

例)

property yourName : ""
if yourName is "" then
display dialog "貴方のお名前は何ですか?" default answer ""
set yourName to text returned of result
end if
set button1 to yourName & "じゃないよ"
display dialog "ハロー! " & yourName & "さん" buttons {button1, "ハロー! マックくん"} default button 2
if (button returned of result) is button1 then
display dialog "じゃぁ誰なんだい?" default answer ""
set yourName to text returned of result
end if

Download: propertyの例題スクリプト(Classic用)

上記のスクリプトをアプリケーション形式で保存してみ、起動してみて下さい。

最初の1回目には貴方の名前を聞いてきますが、2回目以降からは最初に入れた名前をちゃんと覚えていて、挨拶をしてきます。
ただし、名前が違うというボタンを押せば、新たに名前を聞いてきて、その後はその名前で挨拶をするようになります。

こうしておけば、利用される環境によって変化がある、(例えば任意のフォルダを指定する場合など)初期設定値を登録しておく事が出来ます。

●リストからの選択

choose from list 変数名 with プロパティchoose from list でリストの中から選択するダイアログを表示する事が出来ます。

choose from list 変数名
 [ with prompt ダイアログ表示文 ]
 [ default items 初期選択項目 ]
 [ OK button name OKボタン名 ]
 [cancel button name キャンセルボタン名 ]
 [ multiple selections allowed 複数選択(可能は true デフォルトはfalse) ]
 [empty selection allowed 選択なしの許可( 可能は true デフォルトはfalse) ]

上記のようなプロパティがあり、[]の中は省略可能です。

appliListから選ばれたものと、同じ順番にあるkakutyoushiListの項目を探し出し、変数kakutyoushiに代入しています。
ただし、"自分で入力する。"が選択された時だけは、あらたに入力のダイアログを出して、記入してもらったものを拡張しとしています。

●拡張子の追加

set name of obj to ((name of obj) as string) & kakutyoushi

あとは、アイテムのnemeプロパティに選択された拡張子をつないで、もとのアイテムに戻しているだけです。

連番追加

続いて、ファイル名に連番を付けるスクリプトを説明します。
まずは、下のスクリプトを記述して、アプリケーション形式で保存をしてみて下さい。

on open dorp_Items
tell application "Finder"
display dialog "連番の桁数を「000」で指定して下さい。" default answer "000" buttons {"キャンセル", "OK"} default button 2
set ketasu to text returned of result
if ketasu is not "キャンセル" then
display dialog "ファイル名の前に付けますか?後ろに付けますか?" buttons {"キャンセル", "前", "後"} default button 2
set basyo to button returned of result
if basyo is not "キャンセル" then
set I to 1
set strLen to length of ketasu
if basyo = "前" then
repeat with obj in dorp_Items
set numLen to length of (I as string)
set numberName to characters 1 thru (strLen - numLen) of ketasu & I as string
set newName to numberName & ((name of obj) as string)
set name of obj to newName
set I to I + 1
end repeat
else
repeat with obj in dorp_Items
set numLen to length of (I as string)
set numberName to characters 1 thru (strLen - numLen) of ketasu & I as string
set newName to ((name of obj) as string) & numberName
set name of obj to newName
set I to I + 1
end repeat
end if
end if
end if
end tell
end open

Download: 連番追加スクリプト(Classic用)

ファイルをドラッグ&ドロップすると、はじめに連番の桁数を聞いてきます。

連番追加桁数確認

「000」と入力すれば、最初の番号は001になります。
「100」と入力すれば、最初の番号は101になります。

連番追加入力位置

次に連番をファイル名の前か後ろの指定をします。

※注意点
Macのクラッシック環境ではファイル名は32バイトまでに制限されます。
それ以上のファイル名を付けようとすると、エラーになります。
また、ドラッグ&ドロップされるファイルの順番は決してファインダー上で表示されている順番ではないという事に注意して下さい。どのような順番で連番を付けるかは判りません。

●スクリプトの説明

ここで新たに出てきたスクリプトは、lengthとcharactersです。

set strLen to length of ketasu

set numberName to characters 1 thru (strLen - numLen) of ketasu & I as string

どちらも文字(string)に対するプロパティです。すべて読取り専用です。

length 文字列に含まれる文字数。全角も半角も区別しない。
character(s) 文字列に含まれる1つ1つの文字。
paragraph 改行で区切られた文字列の1行。
text 文字列の連続した文字。スペースやタブなども含まれる。
word 文字列内の単語。

 

連番の桁数を揃えるために利用していますが、文字列の置換などにも利用できます。
先ほどは、拡張子を追加するスクリプトを書きましたが、逆に拡張子を外すことも可能です。

on open dorp_Items
tell application "Finder"
repeat with obj in dorp_Items
set objName to ((name of obj) as string)
set period to (offset of "." in objName) - 1
set newName to characters 1 thru period of objName
set name of obj to newName as string
end repeat
end tell
end open

Download: 拡張子消去スクリプト(Classic用)

set period to (offset of "." in objName) - 1

まずはピリオドの位置をファイル名から探し出す。
特定の文字を探すコマンドが

offset of 検索文字列 in 対象文字列

です。答えは、文字列が先頭から初めて見つかった文字数を返します。

これでピリオドの位置を探し、ファイル名の先頭からピリオドの1文字手前迄を新しいファイル名としています。

みなさんもいろいろと改造して、自分の必要な形にしてみては如何ですか。

ページのTopに戻る