Copy link to clipboard
Copied
Hey, I have a script that creates groups and subgroups based on layer names and moves them to the appropriate places. Below is a description of how it works:
1. Creates groups based on layer names. The group name is to consist of the layer name up to the first character "_".
2. Creates subgroups in these groups based on the layer names up to the second "_" character
3. Moves all the layers corresponding to the subgroup name to this subgroup
4. Creates an exception for layers with a string in the name "Texture”, “mask” or “Shadow”. Create a group named like this string and move these layers to it.
Everything works fine, but I don't know why the script skips a large part of the layers, even though they meet the criteria. I marked the problem on the screen. Could someone suggest how to fix it?
#target photoshop;
var doc = app.activeDocument;
var layers = doc.layers;
var groups = {};
for (var i = 0; i < layers.length; i++) {
var layer = layers[i];
var layerName = layer.name;
if (layerName.indexOf("Texture") !== -1) {
if (!groups["Texture"]) {
groups["Texture"] = doc.layerSets.add();
groups["Texture"].name = "Texture";
}
layer.move(groups["Texture"], ElementPlacement.INSIDE);
continue;
} else if (layerName.indexOf("mask") !== -1) {
if (!groups["mask"]) {
groups["mask"] = doc.layerSets.add();
groups["mask"].name = "mask";
}
layer.move(groups["mask"], ElementPlacement.INSIDE);
continue;
} else if (layerName.indexOf("Shadow") !== -1) {
if (!groups["Shadow"]) {
groups["Shadow"] = doc.layerSets.add();
groups["Shadow"].name = "Shadow";
}
layer.move(groups["Shadow"], ElementPlacement.INSIDE);
continue;
}
var firstUnderscoreIndex = layerName.indexOf("_");
var groupName = layerName.substring(0, firstUnderscoreIndex);
var secondUnderscoreIndex = layerName.indexOf("_", firstUnderscoreIndex + 1);
var subgroupName;
if (secondUnderscoreIndex === -1) {
subgroupName = groupName;
} else {
subgroupName = layerName.substring(0, secondUnderscoreIndex);
}
if (!groups[groupName]) {
groups[groupName] = doc.layerSets.add();
groups[groupName].name = groupName;
}
if (!groups[subgroupName]) {
groups[subgroupName] = groups[groupName].layerSets.add();
groups[subgroupName].name = subgroupName;
}
layer.move(groups[subgroupName], ElementPlacement.INSIDE);
}
Copy link to clipboard
Copied
Can you post the file having issues?
You could resize it down to 1 pixel – it is all about the layers, not the pixel content.
Copy link to clipboard
Copied
ok i added the psd file
Copy link to clipboard
Copied
@KHKH wrote:
ok i added the psd file
There is no psd-file.
Copy link to clipboard
Copied
@c.pfaffenbichler - The PSD was added to the OP.
Copy link to clipboard
Copied
I do apologize, my mistake.
Copy link to clipboard
Copied
@Stephen_A_Marsh hi have you looked at this script?
Copy link to clipboard
Copied
I have only had limited time, my first look didn't answer why.