コモノExtendScript100本ノック

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

029.【ESTK】任意の正規表現が名前に含まれないファイルを削除

書いたコード

var myFolder = Folder.selectDialog("フォルダを選択してください");
var myException = [/.+\.pdf/, /.*確認.*\.txt/]; // pdfと確認事項txt以外を削除
removeFiles(myFolder, myException);

// 二つ目の引数を指定しなければ全削除
function removeFiles(tgtFolder, exceptionRegArrs) {
  var flag = false;
  var tgtFiles = tgtFolder.getFiles();
  var tgtFsLen = tgtFiles.length;
  for (var i = tgtFsLen - 1; i >= 0; i--) {
    if (tgtFiles[i].constructor.name === "Folder") {
      removeFiles(tgtFiles[i]);
      tgtFiles[i].remove()
    } else {
      flag = false;
      if (exceptionRegArrs !== undefined) {
        for (var j = 0; j < exceptionRegArrs.length; j++) {
          if (exceptionRegArrs[j].test(decodeURI(tgtFiles[i].name))) {
            flag = true;
            continue;
          }
        }
      }

      if (flag === false) {
        var tmp = tgtFiles[i].remove();
      }
    }
  }
}

メモ

分かったこと

フォルダオブジェクト.remove();は中にファイルがあるとエラーを出さずスキップされる。

積み残し

  • 削除できないファイル/フォルダがあった場合、最後にアラートを出す
    削除できないときは戻り値がfalseになる。
    最後にまとめてアラートを出したいので、処理するたびに処理結果を配列に貯めていく?