Links Remove Number Prefix
Script for Adobe InDesign
Many of my jobs are preparing photo books for the printer. For these projects it is common for content providers to organize images by chapter using numbered prefixes, and many times further numbering images to indicate the order images appear within chapters. This practice is an understandable means of organizing assets and certainly an aid to the designer when assembling the layout, but all too often many changes occur during design and images change order or are moved to other chapters, making the file naming misleading once design is complete and ready to prep for printing. Perhaps not a big deal, but it annoys me, and besides, the numbering at this late stage is excess. Once the layout is complete, the numbering is no longer needed, and for any images re-purposed for future projects, it is meaningless. So I made the script to strip this excess.
- Remove number prefix from filenames and update links
- Adapt open source to customize or create other scripts
Links Remove Number Prefix
How to use the script
The script has no interface other than alert on launch to warn that files on disk will be altered, and alert when complete.
All links in the active InDesign document are analyzed to find any that begin with numbers and optionally a single dot or lowercase letter. For example "15 the filename", "15.3 the filename", "18a the filename", "20.5b the filename". When such a pattern is detected, the prefix is removed. Next white space is trimmed from the begin and end of the filename (not including the file extension), and the new name is tested to ensure a file of the same name does not already exist. If a file does exist, a version number is appended to the name as a suffix, for example "~2" prior to the file extension. Finally, for any filenames that are modified, the placed graphic is then relinked to the new filename.
Source code
(download button below)
/*
Links Remove Number Prefix
Copyright 2023 William Campbell
All Rights Reserved
https://www.marspremedia.com/contact
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
(function () {
var title = "Links Remove Number Prefix";
if (!/indesign/i.test(app.name)) {
alert("Script for InDesign", title, false);
return;
}
// Script variables.
var count;
var doc;
var extension;
var file;
var fileNew;
var fileVersion;
var i;
var ii;
var link;
var baseName;
var nameChanged;
var nameNew;
var progress;
// SETUP
if (!app.documents.length) {
alert("Open a document", title, false);
return;
}
doc = app.activeDocument;
// CREATE PROGRESS WINDOW
progress = new Window("palette", "Progress", undefined, {
"closeButton": false
});
progress.t = progress.add("statictext");
progress.t.preferredSize.width = 450;
progress.b = progress.add("progressbar");
progress.b.preferredSize.width = 450;
progress.display = function (message) {
message && (this.t.text = message);
this.show();
this.update();
};
progress.increment = function () {
this.b.value++;
};
progress.set = function (steps) {
this.b.value = 0;
this.b.minvalue = 0;
this.b.maxvalue = steps;
};
// EXECUTE
// Last chance to backup data first.
if (!confirm("WARNING!\nFiles on disk will be renamed and this cannot be undone. Make backup copies of files before proceeding. Are you sure you want to continue?", true, title)) {
return;
}
// Proceed.
count = 0;
progress.display();
try {
progress.set(doc.links.length);
for (i = 0; i < doc.links.length; i++) {
link = doc.links[i];
file = new File(link.filePath);
progress.increment();
progress.display(link.name);
// Split link.name into base name and extension.
baseName = link.name.replace(/\.[^\.]*$/, "");
extension = String(String(link.name.match(/\..*$/) || "").match(/[^\.]*$/) || "");
// Remove leading digits, dots/digits, single lowercase letter
// followed by more dots/digits, all followed by one or more spaces.
// Handles names such as '15 the link.name', '15.1 ', '15.1a '
nameChanged = baseName.replace(/^\d+[.\d]*[a-z]{0,1}[.\d]* */, "");
// Remove leading spaces and/or dots.
// Handles names such as '15 .1 the link.name' where prior changes leave dot
// the first character (which would otherwise signal it is now a hidden file).
// And names that begin with with a space character are not desirable.
nameChanged = nameChanged.replace(/^[. ]*/, "");
// Trim whitespace.
nameChanged = nameChanged.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
// Did name change?
if (nameChanged != baseName) {
// Test if file with name exists.
nameNew = nameChanged;
fileVersion = 0;
fileNew = new File(file.path + "/" + nameNew + "." + extension);
while (fileNew.exists) {
// File exists. Add version suffix.
fileVersion++;
nameNew = nameChanged + "~" + fileVersion;
fileNew = new File(file.path + "/" + nameNew + "." + extension);
}
// Rename and relink.
if (file.exists) {
progress.display(link.name + " -> " + nameNew + "." + extension);
file.rename(nameNew + "." + extension);
// Loop through all graphics and relink.
// Graphic could be placed more than once.
for (ii = 0; ii < doc.links.length; ii++) {
if (doc.links[ii].name == link.name) {
doc.links[ii].relink(file);
doc.links[ii].update();
count++;
}
}
}
}
}
} finally {
progress.close();
}
alert(count + " links renamed", title, false);
})();
Links Remove Number Prefix
For help installing scripts, see How to Install and Use Scripts in Adobe Creative Cloud Applications.
IMPORTANT: scripts are developed for the latest Adobe Creative Cloud applications. Many scripts work in CC 2018 and later, even some as far back as CS6, but may not perform as expected, or run at all, when used in versions prior to 2018. Photoshop features Select Subject and Preserve Details 2.0 definitely fail prior to CC 2018 (version 19) as the features do not exist in earlier versions. For best results use the latest versions of Adobe Creative Cloud applications.
IMPORTANT: by downloading any of the scripts on this page you agree that the software is provided without any warranty, express or implied. USE AT YOUR OWN RISK. Always make backups of important data.
IMPORTANT: fees paid for software products are the purchase of a non-exclusive license to use the software product and do not grant the purchaser any degree of ownership of the software code. Author of the intellectual property and copyright holder William Campbell retains 100% ownership of all code used in all software products regardless of the inspiration for the software product design or functionality.