フォルダドロップレット汎用 考え中
AppleScript サンプルコード
行番号 | ソース |
---|---|
001 | #!/usr/bin/env osascript |
002 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
003 | # |
004 | # |
005 | # |
006 | # com.cocolog-nifty.quicktimer.icefloe |
007 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
008 | use AppleScript version "2.8" |
009 | use framework "Foundation" |
010 | use framework "AppKit" |
011 | use scripting additions |
012 | property refMe : a reference to current application |
013 | |
014 | ################################# |
015 | #【設定項目】 |
016 | #ここで指定するUTIは親要素が望ましい |
017 | property strUTI : ("public.folder") as text |
018 | |
019 | |
020 | ################################# |
021 | #【1】クリックでオープンした場合 |
022 | on run |
023 | #ダイアログ を前面に |
024 | set strName to (name of current application) as text |
025 | if strName is "osascript" then |
026 | tell application "Finder" to activate |
027 | else |
028 | tell current application to activate |
029 | end if |
030 | #デフォルトパス |
031 | set appFileManager to refMe's NSFileManager's defaultManager() |
032 | set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask)) |
033 | set ocidDesktopDirPathURL to ocidURLsArray's firstObject() |
034 | set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias |
035 | set strMes to ("フォルダを選んでください") as text |
036 | set strPrompt to ("フォルダを選んでください") as text |
037 | try |
038 | #ダイアログ |
039 | set listChooseAliasDirPath to (choose folder strMes with prompt strPrompt default location (aliasDefaultLocation) with multiple selections allowed without invisibles and showing package contents) as list |
040 | on error |
041 | log "エラーしました" |
042 | return "エラーしました" |
043 | end try |
044 | #ファイルリストを次の処理に渡す |
045 | set boolDone to doPathSender(listChooseAliasDirPath) |
046 | #戻り値チェック |
047 | if boolDone is false then |
048 | display alert "エラーが発生しました" message "エラーが発生しました" |
049 | return "エラー終了run" |
050 | else |
051 | return "処理終了run" |
052 | end if |
053 | end run |
054 | |
055 | ################################# |
056 | #【2】ドロップした場合 |
057 | on open listDropAliasDirPath |
058 | #########【2−1】UTIチェック |
059 | #親要素(この属性なら処理する)のUTType |
060 | set ocidChkUTType to refMe's UTType's typeWithIdentifier:(strUTI) |
061 | #サブルーチンに渡すリスト |
062 | set listAliasDirPath to {} as list |
063 | #ドロップされたアイテムの数だけ繰り返す |
064 | repeat with itemDropAliasDirPath in listDropAliasDirPath |
065 | #エイリアス |
066 | set aliasItemDirPath to itemDropAliasDirPath as alias |
067 | set strName to (name of current application) as text |
068 | if strName is "osascript" then |
069 | tell application "Finder" |
070 | #Finder情報を取得して |
071 | set recordInfoFor to info for aliasItemDirPath |
072 | end tell |
073 | else |
074 | tell current application |
075 | set recordInfoFor to info for aliasItemDirPath |
076 | end tell |
077 | end if |
078 | #フォルダか?確認 |
079 | set boolFolder to (folder of recordInfoFor) as boolean |
080 | if boolFolder is true then |
081 | log "フォルダなので処理対象" |
082 | set beginning of listAliasDirPath to aliasItemDirPath |
083 | else if boolFolder is false then |
084 | log "フォルダではないので処理しない" |
085 | end if |
086 | end repeat |
087 | #本来不要だけど ハードリンク対策で入れてある |
088 | #########【2−1】KINDチェック |
089 | set listSendAliasDirPath to {} as list |
090 | repeat with itemAliasDirPath in listAliasDirPath |
091 | set aliasDirPath to itemAliasDirPath as alias |
092 | #処理する判定 |
093 | set boolChkAliasPath to true as boolean |
094 | try |
095 | tell application "Finder" |
096 | set strKind to (kind of aliasDirPath) as text |
097 | end tell |
098 | if strKind is "アプリケーション" then |
099 | log "アプリケーションは処理しない" |
100 | set boolChkAliasPath to false as boolean |
101 | else if strKind is "ボリューム" then |
102 | log "ボリュームは処理しない" |
103 | set boolChkAliasPath to false as boolean |
104 | else if strKind is "エイリアス" then |
105 | log "エイリアスは処理しない" |
106 | set boolChkAliasPath to false as boolean |
107 | end if |
108 | on error |
109 | log "シンボリックリンク等kindを取得できないファイルは処理しない" |
110 | set boolChkAliasPath to false as boolean |
111 | end try |
112 | if boolChkAliasPath is true then |
113 | set beginning of listSendAliasDirPath to aliasDirPath |
114 | end if |
115 | end repeat |
116 | |
117 | #########【2−3】次工程に渡す |
118 | set boolDone to doPathSender(listSendAliasDirPath) |
119 | if boolDone is not true then |
120 | return false |
121 | else |
122 | return "処理終了open" |
123 | end if |
124 | end open |
125 | |
126 | ################################# |
127 | #【3】1と2から |
128 | #フォルダパスのエイリアスリストを受け取り |
129 | #処理に順番に渡す |
130 | to doPathSender(argListAliasDirPath) |
131 | set appFileManager to refMe's NSFileManager's defaultManager() |
132 | #1回でいい処理はここに記述する |
133 | |
134 | ####1フォルダパス毎本処理に渡す |
135 | repeat with itemAliasDirPath in argListAliasDirPath |
136 | #■本処理に渡す |
137 | set boolDone to doAction(itemAliasDirPath) |
138 | #戻り値がエラーだったら? |
139 | if boolDone is false then |
140 | tell application "Finder" |
141 | set strDirName to (name of itemAliasDirPath) as text |
142 | end tell |
143 | set strMes to (strDirName & "でエラーになりました") as text |
144 | display alert "エラーが発生しました" message strMes |
145 | return strMes |
146 | #エラーになったところで止める |
147 | end if |
148 | end repeat |
149 | return true |
150 | end doPathSender |
151 | |
152 | ################################# |
153 | #【4】実際の処理は全てここ |
154 | to doAction(argAliasDirPath) |
155 | set appFileManager to refMe's NSFileManager's defaultManager() |
156 | set aliasDirPath to argAliasDirPath as alias |
157 | set strDirPath to (POSIX path of aliasDirPath) as text |
158 | set ocidDirPathStr to refMe's NSString's stringWithString:(strDirPath) |
159 | set ocidDirPath to ocidDirPathStr's stringByStandardizingPath() |
160 | set ocidDirPathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidDirPath) isDirectory:(true)) |
161 | ### |
162 | try |
163 | ######ここに本処理を入れる |
164 | log strDirPath |
165 | on error |
166 | #エラーになったらfalseを戻す |
167 | return false |
168 | end try |
169 | |
170 | return true |
171 | end doAction |
AppleScriptで生成しました |
| 固定リンク