[ID CC-CC2021] Переименование линков с условием

Linxy

Девушка с битой
10 лет на форуме
Сообщения
2 277
Реакции
3 836

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
Ребят, это какая-то мистика, но и полностью скопированный код скрипта из 56 поста тоже не работает)) Выдает то же окно с ошибкой, что все файлы не найдены. В Links соответственно без изменений. Получается, что упрощенная конструкция сборки названия файла почему-то не втыкает.
...Мне бы это GREP-выражение переделать в вид, когда выбираются все символы названия, а не только цифровой блок....

Вот бы кто-нибудь собрал универсальный скрипт, чтобы в диалоговом окошке можно было префиксы/суффиксы вписывать по необходимости. Мне кажется еще не раз будет всплывать такой же вопрос.

Это если подойти с другого бока..
Это прикольно, но я уже с нижним подчеркиванием все переименовал, а с ним такая фишка не работает. Но буду иметь в виду!
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Без замены файлы с названиями «texttexttext9999.jpg» (в общем с цифрами в конце) не обработаются.
На самом деле, с этим греп запросом явно чтото не то, по факту он просто оставляет выражение как есть, от того и работает 'hmmm'
1576560056917.png

Вопрос в другом - почему не работает без него? %8
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
даже так:
1576561062827.png
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
А если полностью:
JavaScript:
var file = "texttexttext9999.jpg";
var fname = decodeURI(file).replace(/\.[^\.]+$/gim, '');
var rep_num = fname.replace(/.+[^\d]+([\d]+$)/gim, '$1');
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
я посмотрелся повнимательнее к тексту ошибки и в нем прописан старый путь для файлов. Т.е. я тыкаю в новую папку, а в скрипт с исправлениями ищет в старой папке.
Кстати, файлы, которые были изначально потеряны в работающей версии скрипта в ошибке тоже перечислены по старому пути. По идее он должен был их подтянуть, так как в новой папке они есть.

Т.е. изначально нормальные линки он подтаскивает, а изначально потерянные нет.
Ну а версия скрипта с исправлениями и те и другие не видит
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А все, дошло до меня в чем дело
1576562762819.png

То есть, при отрезанном расширении оставляет только цифры иначе эквивалент
 

Linxy

Девушка с битой
10 лет на форуме
Сообщения
2 277
Реакции
3 836

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Судя по скриншоту, никакие цифры топикстартеру вырезать не надо было, у него их в названиях местами нет вообще
То есть данная греп замена по любому только мешает
1576570571969.png
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
В выбранной папке нет файлов с "_BIG" в конце имени.
 

Linxy

Девушка с битой
10 лет на форуме
Сообщения
2 277
Реакции
3 836
То есть данная греп замена по любому только мешает
Да оставь ты её в покое. Конечно её надо убирать, она нужна была для моих целей и тогда прекрасно отработала. А ТС это не надо.
В вариантах в постах 55 и 56 уже нет этой строки с грепом. Не в ней проблема.

Вот бы кто-нибудь собрал универсальный скрипт, чтобы в диалоговом окошке можно было префиксы/суффиксы вписывать по необходимости. Мне кажется еще не раз будет всплывать такой же вопрос.
Всё, что мне встречалось тоже было сделано под определенные цели, не очень гибкие решения. Например:
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
В выбранной папке нет файлов с "_BIG" в конце имени.
в том-то и дело, что есть

мне кажется нужно тему закрыть. Я же полукривым кое-как большую часть заменил, а остальное ручками подтяну.
Всем огромное спасибо, что не оставили на произвол судьбы и поспособствовали еще раз попытаться разобраться в скриптинге самому.

Ну и с наступающим Новым годом! Уже осталось совсем не много! ))
 
Последнее редактирование:

Linxy

Девушка с битой
10 лет на форуме
Сообщения
2 277
Реакции
3 836
Ну мне со вчерашнего для странно почему без нее у топикстартера не работает 'hz'
Череда совпадений.
А может вообще для маков (судя по скриншотам ТС ведь там macOS?) нужен другой подход?

Ну вот рассказ с картинками о том, как всё нормально отрабатывает. И мне пока сложно понять на каком этапе у ТС всё идёт не так.
Есть пять линков. Три на месте, два пропали.
1576580064676.png


Есть папка на другом диске, где три переименованы правильно, а два пьяным лётчиком:
1576580115455.png


Для полного охвата один из пропавших линков ещё имеет неправильно переименованную замену.
Запускаю скрипт из поста 56, указываю там OtherFolder.
В конце скрипт ругается, что:
1576580239732.png

Ругается резонно, потому что нет в папке OtherFolder файлов с таким названием.

В результате всё сделано так, как надо и как скрипт смог:
1576580320337.png


Три файла, которые подходят по маске "название_старого_файла + .BIG.jpg" подтянулись из новой папки, не зависимо от того, были они раньше потеряны или нет.
Тем, кому не нашлась замена остались в прежнем состоянии. Кто отсутствовал — продолжает отсутствовать, кто был прилинкован — всё ещё связан со старой папкой.

@Douglas, на каком этапе у вас всё идёт не так?
Скрипт вам честно пишет, что не нашёл в указанной папке файлы с заданной маской имени. Там всё точно соответствует?
 

Linxy

Девушка с битой
10 лет на форуме
Сообщения
2 277
Реакции
3 836
Я же полукривым кое-как большую часть заменил, а остальное ручками подтяну.
Для простоты и скорости решения я бы вообще воспользовалась советом про Total от @Gad.
Пакетно убрала бы дописку «_BIG» и скопом всё заменила в исходной папке. Индизайн бы потом сам разобрался, что линки обновились. Может ну её, эту ручную работу? ;)
 

Gad

Сообщения
2 975
Реакции
1 408
Собрал все в кучу :) Выложу как есть, под Win ID CS6 вроде работает. Если Mac OS чувствителен к регистру имен файлов (не работал в ней никогда) допустим Big и big не одно и то же имя, работать будет с ошибками. Может и пригодится кому :)
Код:
JavaScript:
#target indesign
#targetengine 'Prefix Postfix Relinks'

var doc = app.activeDocument;

function main(){
    app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;    
    if (app.documents.length != 0){
        if (doc.links.length != 0){
        myDisplayDialog();
        }
        else {
        alert("В документе нет прилинкованых файлов");
        }
    }
    else{
    alert("Нет открытых документов.");
    }
}

function myDisplayDialog(){
    var myDialog = app.dialogs.add({name:"Replace links"});
    with(myDialog){
        with(dialogColumns.add()){
            var myChangeFolderButtons = radiobuttonGroups.add();
            with(myChangeFolderButtons){
            radiobuttonControls.add({staticLabel:"Изменить каталог", checkedState:false});    
            }
                with(borderPanels.add()){
                var myPrefixButtons = radiobuttonGroups.add();
                    with(myPrefixButtons){
                        radiobuttonControls.add({staticLabel:"Убрать", checkedState:true});
                        radiobuttonControls.add({staticLabel:"Добавить"});
                        with (dialogColumns.add()){
                        staticTexts.add({staticLabel:"Префикс:"});
                        }
                        with (dialogColumns.add()){
                        var myPrefixField = textEditboxes.add({editContents:""});
                        }
                    }
                var myPostfixButtons = radiobuttonGroups.add();
                    with(myPostfixButtons){
                        radiobuttonControls.add({staticLabel:"Убрать", checkedState:true});
                        radiobuttonControls.add({staticLabel:"Добавить"});
                        with (dialogColumns.add()){
                            staticTexts.add({staticLabel:"Постфикс:"});
                        }
                        with (dialogColumns.add()){
                        var myPostfixField = textEditboxes.add({editContents:""});
                        }
                    }                    
            }
        }
        var myResult = myDialog.show();
        if (myResult == true){
            var myPrefixRange = myPrefixButtons.selectedButton;
            var myPrefixValue = myPrefixField.editContents.toLocaleLowerCase();
            var myPostfixRange = myPostfixButtons.selectedButton;
            var myPostfixValue = myPostfixField.editContents.toLocaleLowerCase();
            var myChangeFolderRange = myChangeFolderButtons.selectedButton;
            var mySelectedFolder = false
            if (myChangeFolderRange == 0){
                var mySelectedFolder = SelectFolder();
            }
            if ((myPrefixValue != "") || (myPostfixValue != "") || (mySelectedFolder != false) ){
            choiceAction (myPrefixRange, myPrefixValue, myPostfixRange, myPostfixValue, mySelectedFolder)
            }
                else{
                alert("Ничего не выбрано, завершение без изменений");
                }
            myDialog.destroy();
        }
    }
}

function choiceAction (myPrefixRange, myPrefixValue, myPostfixRange, myPostfixValue, mySelectedFolder) {
    var argRange = myPrefixRange * 2 + myPostfixRange;
    switch (argRange) {
        case 0:
            RemovePrefixPostfix (myPrefixValue, myPostfixValue, mySelectedFolder)
            if (wrong.length != 0) {
            alert_scroll ("Не найдены:", wrong);
            }
            break;
        case 1:
            RemovePrefixAddPostfix (myPrefixValue, myPostfixValue, mySelectedFolder)
            if (wrong.length != 0) {
            alert_scroll ("Не найдены:", wrong);
            }
            break;
        case 2:
            AddPrefixRemovePostfix (myPrefixValue, myPostfixValue, mySelectedFolder);
            if (wrong.length != 0) {
            alert_scroll ("Не найдены:", wrong);
            }
            break;
        case 3:
            AddPrefixAddPostfix (myPrefixValue, myPostfixValue, mySelectedFolder);
            if (wrong.length != 0) {
            alert_scroll ("Не найдены:", wrong);
            }
            break;
    }
}

function SelectFolder () {
    var nFolder = File().parent.selectDlg ('Выберите папку с файлами для замены');
    if (!nFolder) {
        return false;
    }
        else {
        return nFolder;
        }
}

function RemovePrefixPostfix (Prefix, Postfix, mySelectedFolder) {
    wrong = [];
    for (var i = 0; i < doc.links.length; i++) {
        var link = doc.links[i];
        var PathFile = File(link.filePath);
        var FileNameExt = decodeURI(PathFile.name.toString().toLocaleLowerCase()); 
        var FileName = FileNameExt.substring(0, (FileNameExt.lastIndexOf(".")));
        var Ext = FileNameExt.substring(FileNameExt.lastIndexOf("."), FileNameExt.length);
    if ((FileName.indexOf(Prefix) == 0) && (Prefix !== "")) {
        var FileName = FileName.substring(Prefix.length, FileName.length);
    }
    if ((FileName.lastIndexOf(Postfix) == FileName.length - Postfix.length ) && (FileName.length >= Postfix.length) && (Postfix !== "")){ 
        var FileName = FileName.substring(0, FileName.length-Postfix.length);
    }
    var nFileNameExt = FileName + Ext;
    if (mySelectedFolder != false) {
        var nPathFile = File(mySelectedFolder + '/' + nFileNameExt)
    }
        else {
        var nPathFile = File(link.filePath.toLocaleLowerCase().replace(FileNameExt, (nFileNameExt)));
        }
    if (nPathFile.exists) {
        link.relink(nPathFile);
    }
        else {
        var wrongPathFile = decodeURI(nPathFile)
        wrong.push(nPathFile);
        }
    }

}

function AddPrefixRemovePostfix (Prefix, Postfix, mySelectedFolder) {
    wrong = [];
    for (var i = 0; i < doc.links.length; i++) {
        var link = doc.links[i];
        var PathFile = File(link.filePath);
        var FileNameExt = decodeURI(PathFile.name.toString().toLocaleLowerCase()); 
        var FileName = FileNameExt.substring(0, (FileNameExt.lastIndexOf(".")));
        var Ext = FileNameExt.substring(FileNameExt.lastIndexOf("."), FileNameExt.length);
    if ((FileName.lastIndexOf(Postfix) == FileName.length - Postfix.length ) && (FileName.length >= Postfix.length) && (Postfix !== "")){ 
        var FileName = FileName.substring(0, FileName.length-Postfix.length);
    }
    if (Prefix !== ""){ 
        var FileName = Prefix + FileName;
    }
    var nFileNameExt = FileName + Ext;
    if (mySelectedFolder != false) {
        var nPathFile = File(mySelectedFolder + '/' + nFileNameExt)
    }
        else {
        var nPathFile = File(link.filePath.toLocaleLowerCase().replace(FileNameExt, (nFileNameExt)));
        }
    if (nPathFile.exists) {
        link.relink(nPathFile);
    }
        else {
        var wrongPathFile = decodeURI(nPathFile)
        wrong.push(wrongPathFile);
        }
    }

}

function RemovePrefixAddPostfix (Prefix, Postfix, mySelectedFolder) {
    wrong = [];
    for (var i = 0; i < doc.links.length; i++) {
        var link = doc.links[i];
        var PathFile = File(link.filePath);
        var FileNameExt = decodeURI(PathFile.name.toString().toLocaleLowerCase()); 
        var FileName = FileNameExt.substring(0, (FileNameExt.lastIndexOf(".")));
        var Ext = FileNameExt.substring(FileNameExt.lastIndexOf("."), FileNameExt.length);
    if ((FileName.indexOf(Prefix) == 0)&&(Prefix !== "")) {
        var FileName = FileName.substring(Prefix.length, FileName.length);
    }
    if (Postfix !== ""){ 
        var FileName = FileName + Postfix;
    }
    var nFileNameExt = FileName + Ext;
    if (mySelectedFolder != false) {
        var nPathFile = File(mySelectedFolder + '/' + nFileNameExt)
    }
        else {
        var nPathFile = File(link.filePath.toLocaleLowerCase().replace(FileNameExt, (nFileNameExt)));
        }
    if (nPathFile.exists) {
        link.relink(nPathFile);
    }
        else {
        var wrongPathFile = decodeURI(nPathFile)
        wrong.push(wrongPathFile);
        }
    }

}

function AddPrefixAddPostfix (Prefix, Postfix, mySelectedFolder) {
    wrong = [];
    for (var i = 0; i < doc.links.length; i++) {
        var link = doc.links[i];
        var PathFile = File(link.filePath);
        var FileNameExt = decodeURI(PathFile.name.toString().toLocaleLowerCase()); 
        var FileName = FileNameExt.substring(0, (FileNameExt.lastIndexOf(".")));
        var Ext = FileNameExt.substring(FileNameExt.lastIndexOf("."), FileNameExt.length);
    if (Prefix !== ""){ 
        var FileName = Prefix + FileName;
    }
    if (Postfix !== ""){ 
        var FileName = FileName + Postfix;
    }
    var nFileNameExt = FileName + Ext;
    if (mySelectedFolder != false) {
        var nPathFile = File(mySelectedFolder + '/' + nFileNameExt)
    }
        else {
        var nPathFile = File(link.filePath.toLocaleLowerCase().replace(FileNameExt, (nFileNameExt)));
        }
    if (nPathFile.exists) {
        link.relink(nPathFile);
    }
        else {
        var wrongPathFile = decodeURI(nPathFile)
        wrong.push(wrongPathFile);
        }
    }
}

function alert_scroll (title, input){
if (input instanceof Array)
       input = input.join ("\r");
var w = new Window ("dialog", title);
var list = w.add ("edittext", undefined, input, {multiline: true, scrolling: true});
list.maximumSize.height = w.maximumSize.height-100;
list.minimumSize.width = 550;
w.add ("button", undefined, "Close", {name: "ok"});
w.show();
}

main();
 
Последнее редактирование: