An updated 1.3 version using the code from @jazz-y to reverse the parent layerSet child layers array.
/*
Rename Artboards Using A Specific Text Pattern.jsx
https://community.adobe.com/t5/photoshop-ecosystem-discussions/custom-script-for-renaming-artboards-with-multiple-elements/td-p/13498536
v1.3, 22nd January 2023, Stephen Marsh
*/
#target photoshop
(function () {
// Check for open doc
if (app.documents.length > 0) {
// Set the Keyword_Size_SKU naming variable
var B = prompt("Enter the Keyword_Size_SKU info:", "Keyword_Size_SKU");
// Test if cancel returns null, then terminate the script
if (B === null) {
//alert('Script cancelled!');
return;
}
// Main script function for single history step
function main() {
// Set the initial layer visibility
var currentLayersState = getLayersVisiblity();
// Loop forwards over top level layer sets
for (var i = 0; i < activeDocument.layerSets.length; i++) {
// Loop backwards over top level layer sets
// for (var i = activeDocument.layerSets.length - 1; i >= 0; i--) {
// Set the for loop variable as the active layer
activeDocument.activeLayer = activeDocument.layerSets[i];
// Conditional (redundant) check that the active layer is a layer set
if (activeDocument.activeLayer.typename === "LayerSet") {
// Set the remaining naming variables
var A = activeDocument.activeLayer.name.replace(/(^.+?)(_.+)/, "$1");
var C = [].slice.call(activeDocument.activeLayer.layers).reverse()[0].toString().replace(/(^\[.+ )(.+)(\]$)/, "$2");
var D = activeDocument.activeLayer.name.replace(/(^.+?)(\.[^\.]+$)/, "$2");
// Rename the layer set
activeDocument.activeLayer.name = A + "_" + B + "_" + C + D;
}
}
// Restore the initial layer visibility
setLayersVisiblity(currentLayersState);
// Functions
function getLayersVisiblity() {
// by jazz-y
var s2t = stringIDToTypeID,
t2s = typeIDToStringID;
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('targetLayersIDs'));
r.putEnumerated(s2t('document'), s2t('ordinal'), s2t('targetEnum'));
var targetLayers = executeActionGet(r).getList(p),
seletion = [],
visiblity = {};
for (var i = 0; i < targetLayers.count; i++) seletion.push(targetLayers.getReference(i).getIdentifier());
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('numberOfLayers'));
r.putEnumerated(s2t('document'), s2t('ordinal'), s2t('targetEnum'));
var len = executeActionGet(r).getInteger(p);
for (var i = 1; i <= len; i++) {
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('layerSection'));
r.putIndex(s2t('layer'), i);
if (t2s(executeActionGet(r).getEnumerationValue(p)) == 'layerSectionEnd') continue;
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('layerID'));
r.putIndex(s2t('layer'), i);
var id = executeActionGet(r).getInteger(p);
(r = new ActionReference()).putProperty(s2t('property'), p = s2t('visible'));
r.putIndex(s2t('layer'), i);
var visible = executeActionGet(r).getBoolean(p);
visiblity[id] = visible;
}
return {
selection: seletion,
visiblity: visiblity
}
}
function setLayersVisiblity(layersStateObject) {
// by jazz-y
var s2t = stringIDToTypeID;
for (var a in layersStateObject.visiblity) {
makeVisible = layersStateObject.visiblity[a] ? "show" : "hide";
(r = new ActionReference()).putIdentifier(s2t('layer'), a);
(d = new ActionDescriptor()).putReference(s2t('target'), r);
executeAction(s2t(makeVisible), d, DialogModes.NO);
}
if (layersStateObject.selection.length) {
var r = new ActionReference()
for (var i = 0; i < layersStateObject.selection.length; i++)
r.putIdentifier(s2t("layer"), layersStateObject.selection[i]);
(d = new ActionDescriptor()).putReference(s2t("target"), r);
d.putBoolean(s2t("makeVisible"), false);
executeAction(s2t("select"), d, DialogModes.NO);
} else {
(r = new ActionReference()).putEnumerated(s2t("layer"), s2t('ordinal'), s2t('targetEnum'));
(d = new ActionDescriptor()).putReference(s2t('target'), r);
executeAction(s2t('selectNoLayers'), d, DialogModes.NO);
}
}
}
} else {
alert('A document must be open to use this script!');
}
// Single history step
activeDocument.suspendHistory("Rename Layer Groups", "main()");
}());