042.【ID】Linkフォルダ内の不要なファイルを抽出・削除
Linkフォルダ内の不要なファイルを抽出し、選択したものだけ削除する。
書いたコード
//@targetengine 'removeLinkFlie' var rslt = []; var doc = app.activeDocument; var inddLink = doc.links; var linkLen = inddLink.length; var linkPath = []; for (var i = 0; i < linkLen; i++) { linkPath.push(inddLink[i].filePath) } var linkFolderPath = inddLink[0].filePath.replace(inddLink[0].name, "") var linkFolder = new Folder(linkFolderPath); var linkData = linkFolder.getFiles() var linkDataPath = []; for (var j = 0; j < linkData.length; j++) { linkDataPath.push(linkData[j].fsName) } for (var k = 0; k < linkData.length; k++) { if (!existInArr(linkPath, linkDataPath[k])) { rslt.push(linkDataPath[k]); } } var dialog = new Window("palette", "どれを削除しますか?"); dialog.orientation = "column"; dialog.preferredSize = [150, 70] var group1 = dialog.add("group"); group1.orientation = "column"; group1.alignChildren = ["left", "center"]; for (var l = 0; l < rslt.length; l++) { group1.add("checkbox", undefined, rslt[l].replace(/.+\\/, "")); } var start = dialog.add("button", undefined, "実行"); dialog.show(); start.onClick = function () { dialog.close(); var flag = false; var err = []; for (var i = 0; i < group1.children.length; i++) { if (group1.children[i].value) { flag = new Folder(rslt[i]).remove(); if (!flag) { err.push(group1.children[i].text); } } } if (err.length === 0) { alert("やったぜ") } else { alert(err.join("・") + "が削除できませんでした") } } function existInArr(arr, tgt) { existInArr = false; var arrLen = arr.length; for (var p = 0; p < arrLen; p++) { if (arr[p] === tgt) { return true; } } }
メモ
分からなかったこと
- remove()が不可能な条件
どのような時にremove()できないのかが分からなかった。jpgやtiffの場合、Photoshopで開いていても削除できてしまった。
- 空の配列の性質
配列が空の時データブラウザに表示されない(?)
JavaScriptコンソールでは以下のようになった。
err===[] 結果 : false err==[] 結果 : false err===false 結果 : false err==false 結果 : true err===undefined 結果 : false err==undefined 結果 : false err.length 結果 : 0
err===[]がfalseになるとは思わなくて大分ひっかかった。
ただ空の配列自体がそういうものなのか、コードに問題があるのか分からない。