コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

042.【ID】Linkフォルダ内の不要なファイルを抽出・削除

f:id:haraguai_is_bad:20190730122229p:plain:w150
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になるとは思わなくて大分ひっかかった。
ただ空の配列自体がそういうものなのか、コードに問題があるのか分からない。

参考