ある日、ある会社からInDesign2022のデータが大量にきました。画像抽出の作業なので、IDMLに変換して、作業者(古いInDesignしか持っていない)に渡す。InDesignからIDMLファイルへの変換コード自体はシンプルだが、目標フォルダー内の全て.inddファイルを探すには、再帰処理(関数が自分自身を読んで実行する)が必要です。
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT; var folderObj = Folder.selectDialog("inddファイルの格納フォルダーを選択してください"); if (!folderObj) { exit(); } const allInddFiles = getFiles(folderObj); const L = allInddFiles.length; // for (var i = 0; i < L; i++) { $.writeln(i + "/" + L);//簡易進捗 // var oldPath = allInddFiles[i].fullName; var newPath = oldPath.replace(/.indd$/g, ".idml");//inddファイルを同じ場所に保存 var doc = app.open(allInddFiles[i], false); doc.exportFile(ExportFormat.INDESIGN_MARKUP, new File(newPath)); doc.close(SaveOptions.NO); } // alert("作業完了しました。"); // function getFiles(folderObj) { var results = []; loop(folderObj); function loop(folderObj) { var myList = folderObj.getFiles("*.indd"); /////////拡張子 if (myList.length !== 0) { results.push(myList); } var fileList = folderObj.getFiles(); var L = fileList.length; while (L--) { if (fileList[L].constructor.name === "Folder") loop(new Folder(fileList[L].fullName)); } } return [].concat.apply([], results); }