Skip to main content
Participant
September 1, 2012
Question

Use Filename as Basis to Set Various Metadata Properties

  • September 1, 2012
  • 1 reply
  • 1507 views

Hi,

I have folders full of images. The filenames will be in the form of

ARTIST#EVENT#PHOTOGRAPHER#RANDOMNUMBER.jpg but could also potentially be

ARTIST at EVENT by PHOTOGRAPHER - RANDOMNUMBER.jpg. I'm happy to use whichever is easier. Basically I can set any delimiter I want and vary it up if needed

I have seen a few examples where the filename is set to the title, description etc but I'm having no luck editing the files to what I need. Ideally I'd like

Document Title: Artist at Event by Photographer

Author: Photographer

Description: Artist at Event by Photographer courtesy of Company Name

Keywords: Artist, Event, Photographer, Company Name

I presume this is possible but was hoping some kind soul out there could help!

Thanks in advance,

JJ

This topic has been closed for replies.

1 reply

Paul Riggott
Inspiring
September 1, 2012

Here is an example, but I don't know where you are going to get the company name?

This example is using the first filename example....

//To be run from ExtendScript Toolkit
#target bridge
app.document.deselectAll();
var thumbs = app.document.getSelection("jpg");
for(var a in thumbs){
var f =thumbs.spec;
var parts = decodeURI(f.name).replace(/- \d+.jpg$/i,'').split('#');
if(parts.length == 3){
setMetadata( File(f), parts )
    }
}

function setMetadata( file, parts ){
var Title = parts[0].toString() + " at " + parts[1].toString() + " by " + parts[2].toString();
var Desc = parts[0].toString() + " at " + parts[1].toString() + " by " + parts[2].toString();
var Author = parts[2].toString();
if ( !ExternalObject.AdobeXMPScript ) ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
        var xmpf = new XMPFile( File(file).fsName, XMPConst.UNKNOWN, XMPConst.OPEN_FOR_UPDATE );
        var xmp = xmpf.getXMP();
        xmp.deleteProperty(XMPConst.NS_DC, "title");
        xmp.appendArrayItem(XMPConst.NS_DC, "title", Title, 0, XMPConst.ALIAS_TO_ALT_TEXT);
        xmp.setQualifier(XMPConst.NS_DC, "title[1]", "
http://www.w3.org/XML/1998/namespace", "lang", "x-default");
        xmp.deleteProperty(XMPConst.NS_DC, "description");
        xmp.setLocalizedText( XMPConst.NS_DC, "description", null, "x-default", Desc );
        xmp.deleteProperty(XMPConst.NS_DC, "creator");
         xmp.appendArrayItem(XMPConst.NS_DC, "creator", Author, 0, XMPConst.ARRAY_IS_ORDERED);
        for(var s in parts){
        xmp.appendArrayItem(XMPConst.NS_DC, "subject", parts, 0,XMPConst.PROP_IS_ARRAY);
        }
      if (xmpf.canPutXMP( xmp )) {
         xmpf.putXMP( xmp );
      }
      xmpf.closeFile( XMPConst.CLOSE_UPDATE_SAFELY );
}


pee2peeAuthor
Participant
August 22, 2013

I'm now using Adobe CC and the script doesn't seem to work anymore

i select the images, click on the option under "tools" and nothing happens. It just goes back to view the desktop. This is my file in full

#target bridge  

if( BridgeTalk.appName == "bridge" ) { 

var vfRename = new MenuElement( "command", "VF Rename", "at the end of Tools" , "vfRename01" );

}

vfRename.onSelect = function () {

app.document.deselectAll();

var thumbs = app.document.getSelection("jpg");

for(var a in thumbs){

var f =thumbs.spec;

var parts = decodeURI(f.name).replace(/- \d+.jpg$/i,'').split('#');

if(parts.length == 3){

setMetadata( File(f), parts )

    }

}

function setMetadata( file, parts ){

var Title = parts[0].toString() + " at " + parts[1].toString() + " by " + parts[2].toString();

var Desc = parts[0].toString() + " at " + parts[1].toString() + " by " + parts[2].toString();

var Author = parts[2].toString();

if ( !ExternalObject.AdobeXMPScript ) ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');

        var xmpf = new XMPFile( File(file).fsName, XMPConst.UNKNOWN, XMPConst.OPEN_FOR_UPDATE );

        var xmp = xmpf.getXMP();

        xmp.deleteProperty(XMPConst.NS_DC, "title");

        xmp.appendArrayItem(XMPConst.NS_DC, "title", Title, 0, XMPConst.ALIAS_TO_ALT_TEXT);

        xmp.setQualifier(XMPConst.NS_DC, "title[1]", "http://www.w3.org/XML/1998/namespace", "lang", "x-default");

        xmp.deleteProperty(XMPConst.NS_DC, "description");

        xmp.setLocalizedText( XMPConst.NS_DC, "description", null, "x-default", Desc );

        xmp.deleteProperty(XMPConst.NS_DC, "creator");

         xmp.appendArrayItem(XMPConst.NS_DC, "creator", Author, 0, XMPConst.ARRAY_IS_ORDERED);

        for(var s in parts){

        xmp.appendArrayItem(XMPConst.NS_DC, "subject", parts, 0,XMPConst.PROP_IS_ARRAY);

        }

      if (xmpf.canPutXMP( xmp )) {

         xmpf.putXMP( xmp );

      }

      xmpf.closeFile( XMPConst.CLOSE_UPDATE_SAFELY );

}

}