alexey-n
1/10/2018 - 6:43 AM

Batch renaming and relinking

var myDoc = app.activeDocument;  
var myAllLinks = myDoc.allGraphics;  
var myMultipleLinks = new Array();  
var myLinksCounter = 1;  
var myPrepend = prompt("Example: thebook_08765", "Job description", "Please enter job description");  
if (!myPrepend) exit();  
var response = confirm("Warning: You are about to rename all images linked to the foremost Indesign Document - proceed? Keep in mind - it is not reversible!", false, "Rename Links Script");  
  
if ( response == true )  
{  
     WriteToFile("\r--------------------- Script started -- " + GetDate() + " ---------------------\n\n");  
       
     for ( k = 0; k < myAllLinks.length; k++ )  
     {  
          var myLinkName = myAllLinks[k].itemLink.name;  
     }  
  
     crearLabels();  
  
     var myPages = myDoc.pages;  
     // Pages  
     for ( p = 0; p < myPages.length; p++ )  
     {  
          var myPageNumber = pad000(myPages[p].name);  
  
          var myLinks = myPages[p].allGraphics;  
          var myASCII = 97;  
          for ( k = myLinks.length - 1; k >= 0; k-- )  
          {  
               var myLink = myLinks[k].itemLink;  
               if (myLink.extractLabel("relinked") != "yes") {  
                    var myOldLinkName = myLink.name;  
                    var myLinkUsage = LinkUsage( myLink );  
                    var myExtension = myOldLinkName.substr(myOldLinkName.lastIndexOf( "." ));  
                    if (LinkUsage(myLink) == 1)  
                    {  
                         var myNewLinkName = myPrepend + myPageNumber + String.fromCharCode( myASCII ) + myExtension;  
                         var myOldImageHDfile = new File( myLink.filePath );  
                         var myRenameResult = myOldImageHDfile.rename( myNewLinkName );  
                         if (myRenameResult)     {  
                              myLink.insertLabel("relinked", "yes");  
                              myLink.relink( myOldImageHDfile );  
                              try {  
                                   myLink = myLink.update();  
                              }  
                              catch(err) {}  
                              myASCII++;  
                              WriteToFile(((myLinksCounter < 10) ? (" " + myLinksCounter) : myLinksCounter) + " - " + myOldImageHDfile.name + " --> " + myNewLinkName + "\n");  
                              myLinksCounter++;  
                         }  
                         else {  
                              if (new File(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension).exists) {  
                                   WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + " because the file already exists\n");  
                              }  
                              else {  
                                   WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");  
                              }  
                         }  
                    }  
                    else {  
                         if (!IsObjInArray(myLink, myMultipleLinks)) {  
                              myMultipleLinks.push(myLink);  
                         }  
                    }  
               }  
          }  
     }  
  
     var myMasterSpreads = myDoc.masterSpreads;  
     // Master spreads  
     for ( m = 0; m < myMasterSpreads.length; m++ )  
     {  
          var myMastSpr = myMasterSpreads[m];  
          var myPageNumber = myMastSpr.name;  
          var myPrefix = myMastSpr.namePrefix;  
          var myLinks = myMastSpr.allGraphics;  
          var myASCII = 97;  
          for ( n = myLinks.length - 1; n >= 0; n-- )  
          {  
               var myLink = myLinks[n].itemLink;  
               if (myLink.extractLabel("relinked") != "yes") {  
                    var myOldLinkName = myLink.name;  
                    var myExtension = myOldLinkName.substr(myOldLinkName.lastIndexOf( "." ));  
                    if (LinkUsage(myLink) == 1)  
                    {  
                         var myLinkLetter = (myLinks.length == 1) ? "" : String.fromCharCode( myASCII );  
                         var myNewLinkName = myPrepend + '_master_' + myPrefix + myLinkLetter + myExtension;  
                         var myOldImageHDfile = new File( myLink.filePath );  
                         var myRenameResult = myOldImageHDfile.rename( myNewLinkName );  
                         if (myRenameResult) {  
                              myLink.insertLabel("relinked", "yes");  
                              myLink.relink( myOldImageHDfile );  
                              try {  
                                   myLink.update();  
                              }  
                              catch(err) {}  
                              myASCII++;  
                              WriteToFile(((myLinksCounter < 10) ? (" " + myLinksCounter) : myLinksCounter) + " - " + myOldImageHDfile.name + " --> " + myNewLinkName + "\n");  
                              myLinksCounter++;  
                         }  
                         else     {  
                              if (new File(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension).exists) {  
                                   WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + " because the file already exists\n");  
                              }  
                              else {  
                                   WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");  
                              }  
                         }  
                    }  
                    else  
                    {  
                         if (!IsObjInArray(myLink, myMultipleLinks)) {  
                              myMultipleLinks.push(myLink);  
                         }  
                    }  
               }  
          }  
     }  
     // Multiple images  
     if (myMultipleLinks.length > 0) {  
          for ( a = myMultipleLinks.length - 1; a >= 0; a-- )  
          {  
               processMultiUsedLinks(myMultipleLinks[a]);  
          }  
     }  
  
     WriteToFile("\r--------------------- Script finished -- " + GetDate() + " ---------------------\r\r");  
       
     if (myLinksCounter == 0) {  
          alert("No links have been renamed", "Rename Links Script");  
     }  
     if (myLinksCounter == 1) {  
          alert("One link has been renamed", "Rename Links Script");  
     }  
     else if (myLinksCounter > 1) {  
          alert(myLinksCounter  + " links have been renamed", "Rename Links Script");  
     }  
  
}  
//--------------------------------------------- Functions ------------------------------------------------  
// Check how many times the link was placed  
function LinkUsage(myLink) {  
     var myLinksNumber = 0;  
          for (var c =  0; c < myDoc.links.length; c++) {  
          if (myLink.filePath == myDoc.links[c].filePath) {  
               myLinksNumber += 1;  
          }  
     }  
     return myLinksNumber;  
}  
//--------------------------------------------------------------------------------------------------------------  
// Relink the links placed more than once  
function processMultiUsedLinks(myLink) {  
     var myExtension = myLink.name.substr(myLink.name.lastIndexOf( "." ));  
     var myMultiUsedLink = new Array();  
     var myAllLinks = myDoc.links;  
       
     for (var d = 0; d < myAllLinks.length; d++)  {  
          if (myAllLinks[d].filePath == myLink.filePath) {  
               myMultiUsedLink.push(myAllLinks[d]);  
          }  
     }  
     try {  
          myLink.show();  
     }  
     catch(err) {}  
       
     var myNewLinkName = prompt ("Enter a name for this image", GetFileNameOnly(myLink.name), "This image is placed " + myMultiUsedLink .length + " times");  
     if (myNewLinkName) {  
          if ( myNewLinkName + myExtension != myLink.name ) {  
               var myOldImageHDfile = new File( myLink.filePath );  
               var myRenameResult = myOldImageHDfile.rename( myNewLinkName + myExtension );  
               if (myRenameResult) {  
                    myLink.insertLabel("relinked", "yes");  
                    myLink.relink( myOldImageHDfile );  
                    try {  
                         myLink = myLink.update();  
                    }  
                    catch(err) {}  
                      
                    WriteToFile(((myLinksCounter < 10) ? (" " + myLinksCounter) : myLinksCounter) + " - " + myOldImageHDfile.name + " --> " + myNewLinkName + "\n");  
                    myLinksCounter++;  
  
                    for (f = myMultiUsedLink.length-1; f >= 0 ; f--)  
                    {  
                         var myCurrLink = myMultiUsedLink[f];  
                         if ( myNewLinkName + myExtension != myCurrLink.name ) {  
                              myCurrLink.insertLabel("relinked", "yes");  
                              myCurrLink.relink( myOldImageHDfile );  
  
                              try {  
                                   myCurrLink = myLink.update();  
                              }  
                              catch(err) {}  
                         }  
                    }  
               }  
               else     {  
                    if (new File(myOldImageHDfile.parent + "/" + myNewLinkName + myExtension).exists) {  
                         WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + " to " + myNewLinkName + myExtension + " because the file already exists\n");  
                    }  
                    else {  
                         WriteToFile("CAN'T RENAME LINK -- " + myOldImageHDfile.name + "\n");  
                    }  
               }  
          }  
     }  
     UpdateAllOutdatedLinks();  
}  
//--------------------------------------------------------------------------------------------------------------  
// Clear labels in case this script has been already run on the current document  
function crearLabels() {  
     for (var f =  0; f < myDoc.links.length; f++) {  
          if (myDoc.links[f].extractLabel("relinked") != "") {  
               myDoc.links[f].insertLabel("relinked", "");  
          }  
     }  
}  
//--------------------------------------------------------------------------------------------------------------  
function UpdateAllOutdatedLinks() {  
     for(var myCounter = myDoc.links.length-1; myCounter >= 0; myCounter--){  
          var myLink = myDoc.links[myCounter];  
          if (myLink.status == LinkStatus.linkOutOfDate){  
               myLink.update();  
          }  
     }  
}  
//--------------------------------------------------------------------------------------------------------------  
function pad000(myNumber) {  
     if (myNumber >= 1 && myNumber <= 9) {  
          x =  "0" + "0" + myNumber;  
     } else if (myNumber >= 10 && myNumber <= 99) {  
          x = "0" + myNumber;  
     } else if (myNumber >= 100 && myNumber <= 999) {  
          x = myNumber;  
     }  
     return x;  
}  
//--------------------------------------------------------------------------------------------------------------  
function GetFileNameOnly(myFileName) {  
     var myString = "";  
     var myResult = myFileName.lastIndexOf(".");  
     if (myResult == -1) {  
          myString = myFileName;  
     }  
     else {  
          myString = myFileName.substr(0, myResult);  
     }  
     return myString;  
}  
//--------------------------------------------------------------------------------------------------------------  
function IsObjInArray(myObj, myArray) {  
     for (x in myArray) {  
          if (myObj.filePath == myArray[x].filePath) {  
               return true;  
          }  
     }  
     return false;  
}  
//--------------------------------------------------------------------------------------------------------------  
function WriteToFile(myText) {  
     myFile = new File("~/Desktop/Rename Links Script.txt");  
     if ( myFile.exists ) {  
          myFile.open("e");  
          myFile.seek(0, 2);  
     }  
     else {  
          myFile.open("w");  
     }  
     myFile.write(myText);   
     myFile.close();  
}  
//--------------------------------------------------------------------------------------------------------------  
function GetDate() {  
     var myDate = new Date();  
     if ((myDate.getYear() - 100) < 10) {  
          var myYear = "0" + new String((myDate.getYear() - 100));  
     } else {  
          var myYear = new String ((myDate.getYear() - 100));  
     }  
     var myDateString = (myDate.getMonth() + 1) + "/" + myDate.getDate() + "/" + myYear + " " + myDate.getHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds();  
     return myDateString;  
 }  
//------------------------------------------------------------------------------------------------------