Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Photoshop script to rename duplicate document as the original document

Community Beginner ,
Jun 20, 2024 Jun 20, 2024

Hi all,

 

I need a script for Photoshop that does the following step

- Select all layers and groups from an opened document

- Duplicate them in a new document 

- Call that new document like the document it copied the layers/groups from 

- Close the original document and leave the copied document active

 

Many many thanks.

TOPICS
Actions and scripting , macOS
210
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Jun 20, 2024 Jun 20, 2024

@damianof11513976 

 

I originally wrote this script for another topic, however, I removed the code as I was having issues duplicating the paths, as there were problems with vector shape layers and regular paths in the paths panel getting messed up.

 

As you didn't ask for paths to be copied, I have modified that script. It still copies any guides and alphas in addition to all the layers. It's easy to disable the function calls to dupe the guides and alphas if you don't require them. The original

...
Translate
Adobe
Community Expert ,
Jun 20, 2024 Jun 20, 2024

@damianof11513976 

 

I originally wrote this script for another topic, however, I removed the code as I was having issues duplicating the paths, as there were problems with vector shape layers and regular paths in the paths panel getting messed up.

 

As you didn't ask for paths to be copied, I have modified that script. It still copies any guides and alphas in addition to all the layers. It's easy to disable the function calls to dupe the guides and alphas if you don't require them. The original document bit depth and ICC profile are retained.

 

All original document-level metadata is removed via the layer duplication process, which was the original idea behind this script.

 

/* 
Dupe All Layers to New Doc Named After Original Doc.jsx
v1.0 - 20th June 2024, Stephen Marsh
https://community.adobe.com/t5/photoshop-ecosystem-discussions/photoshop-script-to-rename-duplicate-document-as-the-original-document/td-p/14692580
Based on:
https://community.adobe.com/t5/photoshop/script-to-remove-all-meta-data-from-the-photo/m-p/10400906
*/

#target photoshop

var theLayers = app.activeDocument.layers;
var sourceDoc = app.activeDocument;
selectAllLayers();
dupeSelectedLayers();
var dupedDoc = app.activeDocument;
app.activeDocument = sourceDoc;
dupeGuides();
dupeAlphas();
// Paths are not currently copied as vector shape layers and regular paths complicate things!
alert('The original document has been duplicated! You will now be prompted to save changes to the original before closing...');
sourceDoc.close(SaveOptions.PROMPTTOSAVECHANGES); // (SaveOptions.SAVECHANGES) | (SaveOptions.DONOTSAVECHANGES)
app.activeDocument = dupedDoc;


// Functions

function selectAllLayers() {
    var c2t = function (s) {
        return app.charIDToTypeID(s);
    };
    var s2t = function (s) {
        return app.stringIDToTypeID(s);
    };
    var descriptor = new ActionDescriptor();
    var descriptor2 = new ActionDescriptor();
    var reference = new ActionReference();
    var reference2 = new ActionReference();
    reference2.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
    descriptor.putReference(c2t("null"), reference2);
    executeAction(s2t("selectAllLayers"), descriptor, DialogModes.NO);
    try {
        // Add the Background layer if it exists
        reference.putProperty(s2t("layer"), s2t("background"));
        descriptor2.putReference(c2t("null"), reference);
        descriptor2.putEnumerated(s2t("selectionModifier"), s2t("selectionModifierType"), s2t("addToSelection"));
        descriptor2.putBoolean(s2t("makeVisible"), false);
        executeAction(s2t("select"), descriptor2, DialogModes.NO);
    } catch (e) {
        alert("Error!" + "\r" + e + ' ' + e.line);
    }
}

function dupeSelectedLayers() {
    var s2t = function (s) {
        return app.stringIDToTypeID(s);
    };
    var descriptor = new ActionDescriptor();
    var reference = new ActionReference();
    var reference2 = new ActionReference();
    reference.putClass(s2t("document"));
    descriptor.putReference(s2t("null"), reference);
    descriptor.putString(s2t("name"), app.activeDocument.name.replace(/\.[^\.]+$/, ''));
    reference2.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"));
    descriptor.putReference(s2t("using"), reference2);
    executeAction(s2t("make"), descriptor, DialogModes.NO);
}

function dupeGuides() {
    var originalRulerUnits = app.preferences.rulerUnits;
    app.preferences.rulerUnits = Units.PIXELS;
    var guidesArray = new Array;
    for (var g = 0; g < sourceDoc.guides.length; g++) {
        guidesArray.push([sourceDoc.guides[g].coordinate, sourceDoc.guides[g].direction]);
    }
    app.preferences.rulerUnits = originalRulerUnits;
    if (dupedDoc != app.activeDocument) {
        app.activeDocument = dupedDoc;
        app.preferences.rulerUnits = Units.PIXELS;
        for (var a = 0; a < guidesArray.length; a++) {
            dupedDoc.guides.add(guidesArray[a][1], guidesArray[a][0]);
        }
        app.preferences.rulerUnits = originalRulerUnits;
    }
}

function dupeAlphas() {
    app.activeDocument = sourceDoc;
    var sourceDocAlphas = sourceDoc.channels;
    var targetDoc = dupedDoc;
    if (app.activeDocument.mode === DocumentMode.RGB || app.activeDocument.mode === DocumentMode.LAB) {
        for (a = 3; a < sourceDocAlphas.length; a++) {
            sourceDocAlphas[a].duplicate(targetDoc);
        }
    } else if (app.activeDocument.mode === DocumentMode.CMYK) {
        for (a = 4; a < sourceDocAlphas.length; a++) {
            sourceDocAlphas[a].duplicate(targetDoc);
        }
    } else if (app.activeDocument.mode === DocumentMode.GRAYSCALE || app.activeDocument.mode === DocumentMode.DUOTONE) {
        for (a = 1; a < sourceDocAlphas.length; a++) {
            sourceDocAlphas[a].duplicate(targetDoc);
        }
    } else { }
    app.activeDocument = dupedDoc;
    dupedDoc.activeChannels = app.activeDocument.componentChannels;
}

 

https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jun 20, 2024 Jun 20, 2024
LATEST

Why not just Save As, close the original, and rename the new file?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines