BACKSTAGE技術部

群馬職業訓練短期大学校、ポリテクカレッジ群馬のデザイン科卒業生で行われる作品展
「BACKSTAGE」の技術的ブログです。
Adobe Illustrator、Photoshopを中心に手持ちのアプリケーション、デジモノの検証結果やTipsをお伝えしていきたいと思います。
リンクはご自由に。報告も不要です。
<< Illustratorでオープンパスの端点から連結せずにパスを描き始める方法 | main | MacでWebサーバーを設定(PHP、バーチャルホストの有効化と同一LAN内からのアクセス) >>
JavaScript for Automation(JXA)でファイルパスからFinderオブジェクトを取得してみる
0
    JUGEMテーマ:Macintosh



    先日Mac miniのOSをYosemiteにしました。
    今までバックアップに使っていた外付けHDDを外し、
    新しくLaCieの4TBの外付けHDDを購入(ポルシェデザイン!!)
    さらに2011モデルなのでUSBが2.0しか付いてないので
    Kanex Thunderbolt to eSATA Plus USB 3.0 Adapterも買っちゃいました。

    iTunesやiPhotoのライブラリが入った3TBのHDDがあるのですが、
    今まではその容量までバックアップできるものがなかったので
    ようやくそちらのデータもバックアップできそうです。


    さて本題。
    今回のアップグレードでJavascriptでMacを制御できるようになったという事なので
    早速スクリプト組んでみたいと思います。

    まずはスクリプトエディタを起動。
    「アプリケーション」フォルダ内の「ユーティリティ」フォルダ内にあります。


    ファイル>新規
    スクリーンショット 2014-11-13 11月13日1.15.39 木.png

    デフォルトだとApplescriptモードですので(環境設定でデフォルトも変更できるようです)
    表示>ナビゲーションバーを表示
    スクリーンショット 2014-11-13 11月13日1.16.01 木.png

    ナビゲーションバーのスクリプトを選択するところで「Javascript」に切り替えます。
    スクリーンショット 2014-11-13 11月13日1.16.17 木.png

    取りあえず何も考えずダイアログ表示させてみよう〜
    と気軽にこんなのを入力
    スクリーンショット 2014-11-13 11月13日1.17.09 木.png
    はい、Javascriptでダイアログ出す命令といえばalertですよね。

    コンパイルして実行〜
    スクリーンショット 2014-11-13 11月13日1.17.33 木.png

    !!!
    スクリーンショット 2014-11-13 11月13日1.17.51 木.png
    えぇぇぇぇ…
    alertダメですか。

    https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/index.html
    この辺とか、色々調べてみたところ
    スクリーンショット 2014-11-13 11月13日1.12.42 木.png
    こんなの入力しないとダイアログ表示出来ないみたい…
    実行すると
    スクリーンショット 2014-11-13 11月13日1.13.25 木.png
    出ましたダイアログ。

    これは先が思いやられます。
    でも、簡単に正規表現が使えるのはかなり魅力的。
    その後更に色々調べてファイル名を変更するドロップレットを作ってみましたが途中挫折しそうでした。
    ファイルのパスからFinderのFileオブジェクトに変換する関数とか用意されてないんですかね?
    その部分でかなり回り道しました。

    出来上がったスクリプトはこれです。

    function openDocuments(docs){
        finder=Application("Finder");
        finder.includeStandardAdditions=true;
        for(var i=0;i<docs.length;i++){
            var thePath=String(docs[i]);
            var theFile=getFile(thePath);
            if(theFile){
                oldName=theFile.name();
                theFile.name=oldName.replace(/¥.jpe?g$/i,".jpg");
            }
        }
    }

    function getFile(filePath){
        var filePath=decodeURI(filePath);
        var trimPath=filePath.replace(/^[^¥/]*[¥/]+/,"");
        var folderList= trimPath.split("/");
        var fileObj=Application("Finder");
        for(var i=0;i<folderList.length;i++){
            if(i==0){
                if(folderList[i]=="Volumes"){
                    i++;
                    fileObj=fileObj.disks.byName(folderList[i]);
                }else{
                    fileObj=finder.startupDisk.folders.byName(folderList[i]);
                }
            }else{
                if(!folderList[i]==""){
                    fileObj=fileObj.items.byName(folderList[i]);
                }
            }
        }
        if(finder.exists(fileObj)){
            return(fileObj);
        }else{
            return(false);
        }
    }


    これをスクリプトエディタにコピペしてアプリケーション形式で保存すれば完成。
    複数のJPEG形式ファイルをドロップすると拡張子(.JPGや.jpegや.JPEG)を.jpgに統一するというリネームスクリプトです。
    応用はかなり利くんじゃないかと思います。
    取りあえず意図通りに動いたのですが、もっと良い記述がありそうな気がします。

    getFile関数がファイルパスを元にFinderのファイルオブジェクトに変換する部分です。
    Finderのfileオブジェクトが簡単に取得できる関数とかあったらありがたいんですけどねぇ。
    getFileという名前付けましたが、フォルダでもエイリアスでもFinderオブジェクトとして取得可能です。

    改善点・ご指摘等ありましたらコメント下さい。
    ブログランキング・にほんブログ村へ
    にほんブログ村
    | タナカ | Macintosh | 02:30 | comments(0) | - | - |









    スマホ版
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
    << June 2017 >>
    + SELECTED ENTRIES
    + RECENT COMMENTS
    • Illustratorの散布ブラシで鉛筆やクレヨン風の書き味を出そう
      タナカ (06/06)
    • Illustratorの散布ブラシで鉛筆やクレヨン風の書き味を出そう
      monday (06/06)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      タナカ (04/29)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      かわだ (04/29)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      タナカ (12/02)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      カール (12/01)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      タナカ (12/01)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      タナカ (11/30)
    • Macのカレンダー.appを使って定期的にアプリケーションを実行してみよう
      カール (11/30)
    • Illustratorでオブジェクトが重なっている部分のみの線分を抽出してみよう
      タナカ (06/30)
    + CATEGORIES
    + ARCHIVES
    + BACKSTAGE
    + Amazon
    + 広告

    + にほんブログ村ランキング
    + MOBILE
    qrcode
    + LINKS
    + PROFILE