2009年2月26日木曜日

フォルダアクションを作るとき

フォルダアクションのスクリプトハンドラ adding folder items は、.DS_Store や Icon^M のような、Finder が自動的に作成するファイルの存在を考慮に入れて作らないといけない。

除外するファイルを考慮に入れた adding folder items ハンドラのサンプル。

-- 今日の日付のサブフォルダを作って、追加された各項目をそこに入れる

-- フォルダアクション (項目追加時) のハンドラ
on adding folder items to this_folder after receiving these_items
  -- フォルダアクションで操作対象外とするファイル
  set excludes to {".DS_Store", ".localized", "Icon" & (ASCII character of 13)}
  set results to my preparation(this_folder, these_items)
  try
    -- メインループ
    repeat with this_item in these_items
      tell application "Finder"
        -- 処理対象外のファイルは、ハンドラを invoke しない
        if name of this_item is not in excludes then
          my itemHandler(this_folder, this_item, results)
        end if
      end tell
    end repeat
  on error error_message number error_number
    display dialog error_message
  end try
end adding folder items to

-- 準備
on preparation(this_folder, these_items)
  -- ファイル移動のための準備
  set today_foldername to my getCurrentDate()
  tell application "Finder"
    -- 今日の日付のフォルダがない時は作る
    if not (exists folder today_foldername of this_folder) then
      make new folder at this_folder with properties {name:today_foldername}
    end if
    folder today_foldername of this_folder
  end tell
end preparation

-- 各項目に対する処理
on itemHandler(this_folder, this_item, target_folder)
  -- 追加された項目を今日の日付のフォルダに格納する
  tell application "Finder"
    considering application responses
      move this_item to the target_folder
    end considering
  end tell
end itemHandler

on getCurrentDate()
  -- yyyy-mm-dd のフォーマットで日付を取得する
  do shell script "date +%Y-%m-%d"
end getCurrentDate

0 件のコメント:

コメントを投稿