とあるDTPオペレーターのInDesignスクリプト備忘録

デザイナー上がりですがいまはDTP命。InDesign用スクリプトの解説などを綴っています。コメント、読者登録歓迎

フォルダ/サブフォルダ内のinDesignドキュメントに何かをするための関数

スクリプトを作るときに付きものなのが、

・「処理したいInDesignドキュメントが入ったフォルダを選んでください」
  ↓
・フォルダを選ぶ
  ↓
・フォルダ内のInDesignドキュメントを片っ端から開いて処理をしていく
・サブフォルダがあれば、その中も探して、見つかったら処理。
 ↓
・処理が終わったら上書き保存

みたいな処理。こうしたファイルを探させる処理をファイル走査の再帰処理とかいいます。
もし私が挫折せずにこのブログを書き続けたら、そうした処理を絡めたスクリプトを解説・掲載することもあるでしょう。
そのとき用に、再帰処理のスクリプトを載せておきます。

(function(){ // 再帰処理を行うための即時関数
    // 一覧を取得したいフォルダを指定
    var folderObj = Folder.selectDialog ("処理したいフォルダを選択してください");
        if (!folderObj) {return;} // キャンセルされたらなんもしない
        var count = 0;
        makeList (folderObj);
        // inddファイルを求める関数
        function makeList (folderObj) {
        // ファイルとフォルダを取得
        var fileList = folderObj.getFiles("*.indd");
            for (i=0; i<fileList.length; i++){ // 見つかったファイルの数だけループさせる
                fileObj = new File(fileList[i].fsName);
                app.open(File(fileObj)); 

//////////ここに処理を書く//////////

                app.activeDocument.close(SaveOptions.YES); // 「はい」で保存
                //app.activeDocument.close(SaveOptions.NO); // 「いいえ」で保存
                }
         // サブフォルダへもぐっていく
            for (var i=0; i<fileList.length; i++) {
                try {
                    var filename =
                    decodeURI (fileList[i].fsName);
                    } catch(e) {
                        var filename = fileList[i].fsName;
                        }
                    count = count + 1;
                    }
                    fileList = folderObj.getFiles ();
                    for (var i=0; i<fileList.length; i++){
                           // フォルダかどうか調べる
                           if (fileList[i].getFiles){
                                makeList (fileList[i]);// フォルダなら再帰呼び出し
}}}})();
alert ("処理が完了しました") ; //終了時のメッセージ

以上です。