Rename each word starting with Capital, BUT excluding specified words

Hi,

I'd like to rename a bunch of files such that each word begins with a capital, but I wish to exclude common words such as 'for', 'as', 'a' and also a list of capitalized abbreviations. Does anyone know how to do this?

Thanks!

You'll need a rename script.

Save 49637.orp to   

%appdata%\GPSoftware\Directory Opus\Rename Presets
JScript
// https://resource.dopus.com/t/rename-each-word-starting-with-a-capital-but-excluding-specified-words/49637

function OnGetCustomFields(getFieldData) {
    getFieldData.fields.alwaysLC = '';
    getFieldData.fields.alwaysLC.label = 'Lower Case';
    getFieldData.fields.alwaysLC.tip = 'Enter words that are always in lower case';

    getFieldData.fields.alwaysUC = '';
    getFieldData.fields.alwaysUC.label = 'Upper Case';
    getFieldData.fields.alwaysUC.tip = 'Enter words that are always in upper case';
}

function OnGetNewName(getNewNameData) {
    var alwaysLC = getNewNameData.custom.alwaysLC;
    var alwaysUC = getNewNameData.custom.alwaysUC;

    var testLC = ' ' + alwaysLC.toLowerCase().replace(/[^a-z ]/g, '') + ' ';
    var testUC = ' ' + alwaysUC.toLowerCase().replace(/[^a-z ]/g, '') + ' ';

    var allWords = getNewNameData.newname_stem.split(' ');

    for (var i = 0; i < allWords.length; i++) {
        var test = ' ' + allWords[i].toLowerCase().replace(/[^a-z]/g, '') + ' ';

        if (testLC.indexOf(test) >= 0) {
            allWords[i] = allWords[i].toLowerCase();
        }

        if (testUC.indexOf(test) >= 0) {
            allWords[i] = allWords[i].toUpperCase();
        }
    }

    return allWords.join(' ') + getNewNameData.newname_ext;
}

How to use Rename Presets from this forum

1 Like

nice, but all non-english characters goes to UPPERcase regardless of the settings

Could you post a list of characters you want to get included?

for example, all russian characters ignored
Действия необходимые для выполнения ‘Умры - Minhadj.com.pdf

Yep, you have a point. That's a few more than I thought :wink:

Try 49637b.orp.

// https://resource.dopus.com/t/rename-each-word-starting-with-a-capital-but-excluding-specified-words/49637/6

function OnGetCustomFields(getFieldData) {
    getFieldData.fields.alwaysLC = ''; // enter your standard lower case words here
    getFieldData.fields.alwaysLC.label = 'Lower Case';
    getFieldData.fields.alwaysLC.tip = 'Enter words that are always in lower case';

    getFieldData.fields.alwaysUC = '';  // enter your standard upper case words here
    getFieldData.fields.alwaysUC.label = 'Upper Case';
    getFieldData.fields.alwaysUC.tip = 'Enter words that are always in upper case';

    getFieldData.fields.noLetters = '';
    getFieldData.fields.noLetters.label = 'No letters';
    getFieldData.fields.noLetters.tip = 'Enter all additional characters that are not letters';
}

function OnGetNewName(getNewNameData) {
    var noLetters = getNewNameData.custom.noLetters;
    var alwaysLC = getNewNameData.custom.alwaysLC;
    var alwaysUC = getNewNameData.custom.alwaysUC;

    noLetters += '\\.\\(\\)\\[\\]\\{\\}\\$,-;_#~!§%';

    var re = new RegExp('[' + noLetters + ']', 'g');

    var testLC = ' ' + alwaysLC.toLowerCase().replace(re, '') + ' ';
    var testUC = ' ' + alwaysUC.toLowerCase().replace(re, '') + ' ';

    var allWords = getNewNameData.newname_stem.split(' ');

    for (var i = 0; i < allWords.length; i++) {
        var test = ' ' + allWords[i].toLowerCase().replace(re, '') + ' ';

        if (testLC.indexOf(test) >= 0) {
            allWords[i] = allWords[i].toLowerCase();
        }

        if (testUC.indexOf(test) >= 0) {
            allWords[i] = allWords[i].toUpperCase();
        }
    }

    return allWords.join(' ') + getNewNameData.newname_ext;
}
1 Like

works great! thanx.
what is no letters for?

No Letters applies to all characters whose case cannot be changed and are not already included in the script (noLetters +=...).

For example, I forgot the @ symbol :blush: .

1 Like