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

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
жалуется вот на эту строку (40):

for (var i = 0; i < links.length; i++) {
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
У нас вообще то есть специальные теги для кода иначе рассыпается при публикации
Замените
JavaScript:
if (decodeURI(file.name.toString()).indexOf(name) == 0) {
res.push(link);
}
на
JavaScript:
res.push(link);
 

_MBK_

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

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Это исправление тут как мертвому припарка...
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
Снимок экрана 2019-12-16 в 15.56.14.png
да. Он просто добавил "shutterstock_" к названиям, сделал их тифами и понятное дело не нашел в папке с линками))
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А это вы поправили?
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
это после вашего исправления. Я вставил его в исходник.
Ну во всяком случае фильтр и правда выключился))))

Нужно видимо префикс заменить на _BIG и в формуле поставить его в конец имени файла, а tif заменить на jpg

Или может вообще расширение из формулы убрать?
 
Последнее редактирование:

_MBK_

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

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
Код:
#target indesign
#targetengine 'stock-photo'

//var ffname = 'stock-photo';
//var prefix = '_BIG';
//var ext = 'jpg';

function getLinksByName (doc, name) {
    var res = [];
    for (var i = 0; i < doc.links.length; i++) {
        var link = doc.links[i];
        var file = File(link.filePath);
        res.push(link);
    }
    return res;
}

function main () {
    try {
        var doc = app.activeDocument;
    } catch (error) {
        alert('Нет открытых документов!');
        return false;
    }

    var links = getLinksByName(doc, ffname);
    if (links.length == 0) {
        alert('Не обнаружены связанные файлы, имена которых начинаются на "' + ffname +'"');
        return false;
    }
    var fldr = File(links[0].filePath).parent.selectDlg('Выберите папку с файлами для замены');
    if (!fldr) {
        return false;
    }

    var wrong = [];

    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        var file = File(link.filePath);
        var fname = decodeURI(file.name.toString()).replace(/\.[^\.]+$/gim, '');
        var rep_num = fname.replace(/.+[^\d]+([\d]+$)/gim, '$1');
        var rep_name = rep_num + prefix + '.' + ext;
        var rep_file = File(fldr + '/' + rep_name);
        if (rep_file.exists) {
            link.relink(rep_file);
        } else {
            wrong.push(rep_name);
        }
    }

    if (wrong.length != 0) {
        var str = 'Не нейдены:\n' + '"' + wrong.join('", "') + '"';
        alert(str);
    }
}

main();
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Вы невнимательно читаете
Вот эти строки
Код:
var rep_num = fname.replace(/.+[^\d]+([\d]+$)/gim, '$1');
var rep_name = rep_num + prefix + '.' + ext;
поменять на
Код:
var rep_name = fname + '_BIG.' + ext;
 
Последнее редактирование:
  • Спасибо
Реакции: Linxy

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
там была одной (первой) из этих двух строк.
В общем с такой заменой, что одной, что двух строк - не работает.
Выскакивает ошибка с перечислением всех файлов))))

А вот без замены - работает! )) Правда он там ищет и psd и ai под расширением джипега, но это даже хорошо. Мне их как раз менять не нужно.

ps
мы наверное не все сроки поменяли. Может еще где?
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
Снимок экрана 2019-12-16 в 16.27.29.png
ну и так далее.
Мне вот только не понятно, почему (это если без замены последних двух строк) если я выключил слэшами первые три строки с объявлением переменных, то они все равно участвуют в подстановках? Откуда он их берет?

В вашем случае мы избавились от этой строки:
var rep_num = fname.replace(/.+[^\d]+([\d]+$)/gim, '$1');

и он вообще ничего найти не может.

Как я понимаю строку
var rep_name = rep_num + prefix + '.' + ext;
мы просто упростили...
Кстати в ней тоже переменная ext, которая объявляется вверху и которую я как и в первом случае выключил слэшами
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
да, так и есть. Буду знать!
 

Douglas

Участник
Топикстартер
Сообщения
41
Реакции
0
спасибо!
Хоть в таком виде, но это уже большое подспорье!