この間ご紹介したキーボードランチャAlfredの拡張、2作目作りました!
今回はかなりいい出来!!(前回が前回なだけに) 間違いなく便利です!
その名もLight Renamer!Alfredから爆速で高性能なリネームが出来る!
これは見なきゃ損!使わなきゃ損!ではさっそくご紹介します!(`・ω・´)
追記(110823)
一番下に直接コード貼りました。
たぶん、AlfredのPowerpackじゃないと見れないと思うので。
近いうち、もっと分かりやすい方法を載せますので、Alfredの便利さを心待ちにしてください(`・ω・´)
動画にしてみました!多分これが一番分かりやすいんじゃないかと思います。
ピンぼけみたいになってますが、挙動はこんな感じです。キャプチャしながらだからCPUフル回転してるので、実際はもっと速いです。
最後のオマケAlfred拡張も近いうち記事あげますー( ´ ▽ ` )ノ
一晩かかったんだし、まずは自慢させてください
・・・なんか通販みたいだったで普通にいきましょう。
とりあえず、モノを見てもらったほうが早いので、こちらをどうぞ。
この拡張をざっくり説明すると、Finderで選択中の項目(ファイル/フォルダ両方)を、複数のパラメータを持たせてリネームします。
例えば、連番をつけたり、日付をつけたり、親フォルダの名前を参照したり、という感じです。
一連の流れを見てもらえば、なお分かりやすいかと思います。
まず、Finderで複数の項目を選択します。
見づらいですが、自炊した漫画で100項目掴みました。
おもむろにAlfredを呼び出します。僕はcontrol + space。
そして、"re fol,面白いよ!,n"と入力。
これはAlfredからパラメータを送るルールです。この辺はあとでご紹介。
ほい!!実行して3秒ほど、選択していたファイルがリネームされました!
"BLOOD+ 03_面白いよ!_001".jpg、完璧です!!
これは送ったパラメータ、"re fol,面白いよ!,n"で指定した内容となっています。
当然コレ以外のパラメータも送れますし、パラメータの順番も自由自在です。
リネームは名前昇順で実行されるので、連番に狂いもありません。
どうでしょう、なかなか使えそうな機能じゃないでしょうか。
Light Renamerはここが凄い!
では、このほかにどんなリネームが出来るのか。パラメータの説明と合わせて紹介します。
先ほどのパラメータの内容を紐解くと、こんな感じになっています。
re_fol,面白いよ!,n
- re → AlfredからLight Renamerを呼び出すコマンド。必須です。
- _ → 半角スペース。見えないので_書きましたが、実際は空白です。
- fol → 親フォルダ名を表すパラメータ。[定数]
- 面白いよ! → 設定していないパラメータ。要するに好きに使える文字列。[定数]
- n → 連番を表すパラメータ。三桁だけど二桁、一桁もある。[変数]
- , → それぞれのパラメータを区切る文字。これは固定してます。
このようにパラメータを与えることで、好きな構成の名前に変えられるという具合です。
このほかにも、下のパラメータも用意しています。
- t → 日付を表すパラメータ。yymmddの記述で日付が入ります。[定数]
- cur → リネーム前の名前を表すパラメータ。[変数]
これらのパラメータを好きな順番に並べれば、
re cur,t
→朝食_110813.jpg, 昼食_110813.jpg, 夕食_110813.jpg, 総カロリー_110813.txt,...
のような、食事ログのまとめ、
re n,沖縄旅行,t
→001_沖縄旅行_110813.jpg, 002_沖縄旅行_110813.avi, 003_沖縄旅行_110813.mp3,...
のような、旅行のデータまとめなどが、とても手軽に行えます。
僕が例で出した自炊ファイルのまとめは、一番ポピュラーな使いかたかと思います。
今挙げた食事ログのまとめを見ると分かりますが、パラメータは2つでも1つでも問題ありません。
その場合、区切りの","は省略して構いません。("re n" or "re n,t"の実用性は凄まじいです。)
拡張子を保護してリネームするので、いろんなファイルが混ざっていても大丈夫。
フォルダも同じ方法でリネームするので、ファイルとフォルダが混ざっていても大丈夫。
そしてそして、各パラメータには"t"、"n"、"fol"などが割り当てられてますが、これは設定で好きな文字に変更出来ます。
ついでに区切り文字の"_"も好きに変更出来ます。もうなんでもアリなレベル。
スクリプト内に"チョチョイと設定"という設定部分を作っているので、その値を変えてもらえばOK。
キーボードランチャからチョロっと叩くだけで、ここまで出来ていいのかと疑います。
自分で言うのもなんですが、これだけ出来れば普段づかいには十分でしょう。
もう簡単なリネームなら、専用アプリは必要ありません。
是非みなさんも使ってみてください!!
Alfredでの使いかたは、前回の記事に書いてますのでそちらをどうぞ。
ついでではありますが、Growlの通知もつけました。リネーム完了後、ポンと出ます。
ただ、これはエラー報告では無いです。ただ”出てくるだけ”。自己満足。
音などを設定したい人は、一度このスクリプトでGrowlをポップアップさせてから、
システム環境設定→Growl→アプリケーション→Light Renamerから設定してください。
「そんなんいらんわ」「Growl入れてない」という人は、スクリプト内に書いてある"チョチョイと設定"から、growl_runの初期値を"false"にしてください。
よかったらエラー処理にでも役立たせてくれれば幸いです。
いくつか注意点
使う上で、頭の片隅に覚えておいて欲しい項目がいくつか。
まず、Backgoundのチェックボックスを"ON"、Actionを"OFF"にしてください。
Backgroundが"OFF"でもリネームは出来ますが、リネーム中Alfredがほぼ固まります。
本末転倒もはなはだしいです。
そしてこれが大切なんですが、リネームするファイル/フォルダまでのフルパス(自身も含む)に、"."を含んだものはリネーム出来ません。
拡張子はOKなんですが、二重拡張子やフォルダに"."が入ったものは対応していません。(.tar.gzなど)
普段僕が扱わない拡張子は頭から抜けてました、ごめんなさい(´・ω・`)
その辺は他の専用ソフトでリネームするか、スクリプトを書き換えてください。
最後に。使っていると分かることなんですが、パラメータには[定数]と[変数]があります。
上のリストの末尾に書いてあるのがソレです。
連番、元のファイル名が変数となっており、この2つはファイルごとに値が違います。
それ以外の親フォルダ名、日付、任意の文字列は、常に一定の値が入ります。
もうピンときたでしょうが、定数のパラメータだけでリネームを実行すると、2つ目のリネーム処理でファイル名が重複してしまうため、リネームされません。
まあ、それでもエラーは吐かないのでリネームは素直に終了しますが、最初のファイルだけリネームされてしまうという危なっかしい状態になります。
実際には拡張子が違えばリネームは行えるので一概ではありませんが、こういった側面があることを知っておいてください。
あとがき - Alfredならではの拡張とは
"Light Renamer"を作って思ったことコーナー。このあとがき、恒例になりそうです。
前回のタイマーも一応Alfred用の作りでしたが、今回のは完全にAlfred専用な感じで大満足。
というのは、キーボードランチャからパラメータを直接投げるという挙動についてです。
この部分を踏まえないと、「それ別のやり方のが速くね?」ってことに成りかねません。
速さがすべてとは言いませんが、キーボードランチャを使う人は割とそういう考えではないでしょうか。(僕だけか?)
Light Renamerは、力ではワイルドカードや正規表現でゴリゴリとリネーム出来るアプリには手も足も出ませんが、こと速さにおいては格別です。
キーボードランチャに似合った、適材適所な拡張機能と言っていいでしょう。
まあ中身は相変わらずズタボロですが、Alfredの考えはこんな感じなのかなと思います。
とまあ、さすがにいい加減自己満過ぎるので、そろそろ次のアプリの構想に移ります(笑)
コードを追記
コメント込みだとすごい量だな・・・
(*
Light Renamer
すいとー (@suito1942)
http://www.hw2-suito.com/
*概要
Alfredから使える、簡易リネームスクリプトです。
Finderで選択している項目をリネームします。
ファイル/フォルダ両用です。複数選択した場合、名前昇順で実行されます。
入力文字を","で区切り、さまざまなパラメータを最大3つまで組み合わせることが出来ます。
各パラメータは下記。(Syntaxは変更可)
Syntax:$任意の文字列 [定数]
任意の文字列。ファイル名に使えない文字列は含まないでください。
Syntax:$t [定数]
日時を入力します。記述はyymmdd。(例:110813)
Syntax:$n [変数]
連番を入力します。デフォルトの記述は三桁。(例:001,002,003,...)
一桁、二桁もオプションで用意しています。変更したい場合は最後の"カウントアップ"を編集してください。
Syntax:$fol [定数]
親フォルダ名を入力します。
Syntax:$cur [変数]
リネーム前のファイル名を入力します。
*使いかた
Alfredのkeywordを入力し(デフォルトは"re")、returnもしくは" "を押して、それぞれのパラメータを","で区切って入力します。
それぞれのパラメータは"_"で区切られます。
少し分かりづらいので、いくつかの実用例を紹介します。
1、"re n,沖縄旅行,t" と入力 [対象:沖縄旅行のいろんなデータ]
→001_沖縄旅行_110813.jpg, 002_沖縄旅行_110813.avi, 003_沖縄旅行_110813.mp3,...
2、"re cur,t" と入力 [対象:今日食べた食事のデータ]
→朝食_110813.jpg, 昼食_110813.jpg, おやつ_110813,jpg, 夕食_110813.jpg, 総カロリー_110813.txt,...
3、"re fol,cur" と入力 [対象:「よつばと!1巻」を自炊したデータ]
→よつばと!1巻_001.jpg, よつばと!1巻_002.jpg, よつばと!1巻_003.jpg,...
パラメータは最大3つまで。1つでもリネームは出来ます。(実際、"re n"はよく使うと思います。)
ファイル、フォルダともに、同様の処理をします。(拡張子は保護します。)
各パラメータを呼び出すSyntaxと、各パラメータを区切る"_"は、下記から変更可能です。("チョチョイと設定"から〜まで)
使いやすい文字に変更してみてください。
*注意点
Backgoundのチェックボックスを"ON"、Actionを"OFF"にしてください。
スクリプトの仕様上、下記のファイル、フォルダ名のものはリネーム出来ません。
"."を含むファイル、フォルダ名(階層含んですべて)
二重拡張子のファイルなどは、別の手段でリネームしてください。
各パラメータには、回数を重ねるごとに内容が変更されるものと、変更されないものがあります。
Syntaxの欄にある、[定数],[変数]がそれにあたります。(拡張子は準変数としておきます。)
連番、リネーム前ファイル名は毎回変わりますが、それ以外はずっと同じ文字列が入ります。
[定数]のパラメータのみで構成すると、2つ目のリネーム処理でファイル名の重複によるエラーとなります。
「ミスった!・・・あれ?元のファイル名なんだっけ?」と陥りやすいので、気をつけてください。
*おまけ
ついでにGrowlの通知もつけました。リネーム完了後、ポップアップします。
ただし、エラー報告などではありません。ただ"出てくるだけ"です。
音などを設定したい人は、一度このスクリプトでGrowlをポップアップさせてから、
システム環境設定→Growl→アプリケーション→Light Renamerから設定してください。
「そんなんいらんわ」「Growl入れてない」という人は、"チョチョイと設定"から、
growl_runの値を"false"にしてください。
上手くエラー処理に役立たせてくれれば幸いです。
*)
on alfred_script(q)
set q to q as text
--チョチョイと設定 ここから
--""内を変えるとSyntaxを変更できます
set t to "t" --日付のSyntax
set n to "n" --連番のSyntax
set fol to "fol" --親フォルダのSyntax
set cur to "cur" --現在のファイル名のSyntax
set separator to "_" --各パラメータを区切る文字
set growl_run to "true" --いる場合は"true"、いらない場合は"false"
--チョチョイと設定 ここまで
--フォルダ名取得
tell application "Finder"
tell window 1
set parent_path to target as alias as text
end tell
try
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set parent_list to ""
repeat with i from 1 to (count text item of parent_path)
set demo to text item i of parent_path
set parent_list to parent_list & demo as list
end repeat
end try
set demo to count of parent_list
set demo to demo - 1
set folder_name to text item demo of parent_list
set AppleScript's text item delimiters to oldDelim
end tell
--その他もろもろ
set current_day to (do shell script "date '+%y%m%d'")
set item_num to 0
set count_type to ""
set current_type to ""
set current_name to ""
--引数の判定と代入、count_typeとcurrent_typeは後の判定用
set my_parameter to q
set my_parameter to my_parameter & "," & "," --引数が少ない時用
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to ","
if text item 1 of my_parameter = t then
set A to current_day
else if text item 1 of my_parameter = n then
set A to item_num
set count_type to "A"
else if text item 1 of my_parameter = cur then
set A to ""
set current_type to "A"
else if text item 1 of my_parameter = fol then
set A to folder_name
else if text item 1 of my_parameter ≠ "" then
set A to text item 1 of my_parameter
else
set A to ""
end if
if text item 2 of my_parameter = t then
set B to current_day
else if text item 2 of my_parameter = n then
set B to item_num
set count_type to "B"
else if text item 2 of my_parameter = cur then
set B to ""
set current_type to "B"
else if text item 2 of my_parameter = fol then
set B to folder_name
else if text item 2 of my_parameter ≠ "" then
set B to text item 2 of my_parameter
else
set B to ""
end if
if text item 3 of my_parameter = t then
set C to current_day
else if text item 3 of my_parameter = n then
set C to item_num
set count_type to "C"
else if text item 3 of my_parameter = cur then
set C to ""
set current_type to "C"
else if text item 3 of my_parameter = fol then
set C to folder_name
else if text item 3 of my_parameter ≠ "" then
set C to text item 3 of my_parameter
else
set C to ""
end if
set AppleScript's text item delimiters to oldDelim
tell application "Finder"
set g_i to 0 --遊びで使ってます、よかったらエラー処理に役立たせてください
repeat with select_item in (selection as list)
set file_path to select_item as text
set g_i to g_i + 1
if file_path contains "." then --ファイルのとき(拡張子の有無を判定。二重拡張子、親フォルダに"."がある場合は成り立たない理由)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to "."
set item_ext to last text item of file_path --拡張子取得
set current_name_text to text item 1 of file_path
try
set AppleScript's text item delimiters to ":"
set current_name_list to ""
repeat with ii from 1 to (count text item of current_name_text)
set list_demo to text item ii of current_name_text
set current_name_list to current_name_list & list_demo as list
end repeat
end try
set current_name to last text item of current_name_list --現在の名前取得
set AppleScript's text item delimiters to oldDelim
--変数になるcurとnはrepeat内
--引数にcurがあったとき
if current_type = "A" then
set A to current_name
else if current_type = "B" then
set B to current_name
else if current_type = "C" then
set C to current_name
end if
--引数にnがあったとき
if count_type = "A" then
set A to my count_up(A)
else if count_type = "B" then
set B to my count_up(B)
else if count_type = "C" then
set C to my count_up(C)
end if
--リネーム
if C = "" and B = "" then
set name of select_item to A & "." & item_ext as Unicode text
else if C = "" then
set name of select_item to A & separator & B & "." & item_ext as Unicode text
else
set name of select_item to A & separator & B & separator & C & "." & item_ext as Unicode text
end if
else --フォルダのとき
try
set AppleScript's text item delimiters to ":"
set current_name_list to ""
repeat with ii from 1 to (count text item of file_path)
set list_demo to text item ii of file_path
set current_name_list to current_name_list & list_demo as list
end repeat
end try
set current_name to last text item of current_name_list --現在の名前取得
set AppleScript's text item delimiters to oldDelim
--変数になるcurとnはrepeat内
--引数にcurがあったとき
if current_type = "A" then
set A to current_name
else if current_type = "B" then
set B to current_name
else if current_type = "C" then
set C to current_name
end if
--引数にnがあったとき
if count_type = "A" then
set A to my count_up(A)
else if count_type = "B" then
set B to my count_up(B)
else if count_type = "C" then
set C to my count_up(C)
end if
--リネーム
if C = "" and B = "" then
set name of select_item to A as Unicode text
else if C = "" then
set name of select_item to A & separator & B as Unicode text
else
set name of select_item to A & separator & B & separator & C as Unicode text
end if
end if
end repeat
end tell
if growl_run = "true" then
set g_i to "total " & g_i & " items" as text
my growlRegister()
growlNotify("End Run Rename", g_i)
end if
end alfred_script
--サブルーチン
--カウントアップ
-- 一桁にする・・・[2],[3]をコメントアウト
-- 二桁にする・・・[3]をコメントアウト
-- 三桁にする・・・[2]をコメントアウト
-- (コメントアウトは行頭に"--"をつけてください)
to count_up(type)
set type to type + 1 -- [1]
--set type to text -2 thru -1 of ("0" & type) -- [2]
set type to text -3 thru -1 of ("00" & type) -- [3]
return type
end count_up
--Growlサブルーチン
--エラーの方は使ってません。よかったらどこかに設置してください。
using terms from application "GrowlHelperApp"
on growlRegister()
tell application "GrowlHelperApp"
register as application "Light Renamer" all notifications {"Notification"} default notifications {"Notification"} icon of application "Alfred.app"
end tell
end growlRegister
on growlRegister_error()
tell application "GrowlHelperApp"
register as application "Light Renamer error" all notifications {"Alert"} default notifications {"Alert"} icon of application "Alfred.app"
end tell
end growlRegister_error
on growlNotify(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Notification" title grrTitle description grrDescription application name "Light Renamer"
end tell
end growlNotify
on growlNotify_error(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Alert" title grrTitle description grrDescription application name "Light Renamer error"
end tell
end growlNotify_error
end using terms from
Thank you for your blog post.Really looking forward to read more. Really Cool.
返信削除