Skip to main content
Known Participant
March 11, 2015
Answered

Delete Layer, based on name

  • March 11, 2015
  • 1 reply
  • 3509 views

I came across this script that deletes a layer based on its name,.. which works great on a single instance,

try{

activeDocument.activeLayer = activeDocument.artLayers.getByName("Hello");

activeDocument.activeLayer.remove();

    }catch(e){}

Is it possible to modify this, such that it loops through all the layers and deletes those where  that name appears? ( including those within a group folder, if possible)

... and also won't error if that layer name doesn't appear within the document.

thanks for any help

This topic has been closed for replies.
Correct answer xbytor2

Thanks, xbytor2

I appreciate the help!
..but its still giving an error.

Error 1302: No such element
Line 24
-> var sets = layerSet.layerSets;

any ideas?

Thanks again.


Here is a version that I actually tested, so it should work.

function removeLayersByName(layerSet, name) {

  var recurse = true;

  var multi = true;

  var cnt = 0;

  while (true) {

    try {

      var layer = layerSet.artLayers.getByName(name);

    } catch (e) {

      break;

    }

    layer.remove();

    cnt++;

    if (!multi) {

      break;

    }

  }

  if (!multi && cnt != 0) {

    return;

  }

  if (recurse) {

    var sets = layerSet.layerSets;

    var len = sets.length;

    for (var i = 0; i < len; i++) {

      removeLayersByName(sets, name);

    }

  }

};

removeLayersByName(activeDocument, "XXX");

1 reply

Inspiring
March 11, 2015

This should get you close. I haven't run this so I can't make any promises.

Note: you may want to make recurse and multi parameters to the function.

function removeLayersByName(layerSet, name) {
  var recurse = true;
  var multi = true;
  var cnt = 0;

  while (true) {
    try {
      var layer = layerSet.artLayers.getByName(name);
    } catch (e) {
      break;
    }
    layer.remove();
    cnt++;
    if (!multi) {
      break;
    }
  }

  if (!multi && cnt != 0) {
    return;
  }

  if (recurse) {
    var sets = layerSet.layerSets;
    var len = sets.length;
    for (var i = 0; i < len; i++) {
      removeLayersByName(sets, name);
    }
  }
};

removeLayersByName(activeDoc.layers, "hello");

Known Participant
March 11, 2015
Thanks for the reply and code, xbytor2

unfortunately I receive this error:

Error 2 activeDoc is undefined
Line 31

-> removeLayersByName(activeDoc.layers, "hello");

....and as for your suggestion:
"Note: you may want to make recurse and multi parameters to the function."

Sadly, I know very little about writing code.

Inspiring
March 11, 2015

'activeDoc' should be 'activeDocument'