[PS CC2023] cкрипт в фотошоп на все подпапки

workzhen

Участник
Топикстартер
Сообщения
8
Реакции
0
подскажите нашёл нужный скрипт. Всё работает.

Скрипт при запуске просит указать целевую папку.
И потом выполняет определенные действия. Всё ок.


Только вот если в папке есть подпапки. Скрипт пишет - закройте документ перед запуском скрипта. И всё. Стоп.
Как починить?
Нужно чтобы скрипт отрабатывал все подпапки в папке.
Спасибо

начало скрипта:

#target photoshop
app.bringToFront();

if (!documents.length) {

var savedDisplayDialogs = app.displayDialogs;

app.displayDialogs = DialogModes.NO;

for (var a = 0; a < inputFiles.length; a++) {
try {
var inDoc = open(inputFiles[a]);

// Start doing stuff - тут уже начинается само тело скрипта. Ошибка где то ранее


/* CONDITION #1 */
if (app.activeDocument.name.indexOf('#1') != -1) {
app.doAction('1VESNA', ''); // Change action & action set name
/* CONDITION #1 */
 

Drawer

Участник
Сообщения
1 811
Реакции
797
Нужно чтобы скрипт отрабатывал все подпапки в папке
1. Не понятно что Вы вообще хотите :) Открывать подпапки? Даже не знаю что кроме файловых менеджеров может это сделать
2. Пользуйтесь кнопкой
1675454656463.png
для оформления кода.
3.
Не нашел в коде выше ничего работающего :)
4. Чем Вас не устраивает встроенная функция батча или дроплет?
1675454791250.png
там даже чекбокс есть какой Вам надо... :)
 

jazzy

Участник
Сообщения
328
Реакции
175
Полный код выложите. Нужно вынести код получения файлов в отдельную функцию и рекурсивно вызывать ее для каждого подкаталога. Очевидно, что у вас сейчас просто файлы перебираются без учета папок.
Если в коде нет проверки на тип файлового объекта, то скрипт не понимает, что есть папка, а что каталог. Он все пихает в массив inputFiles. Как только пытается открыть очередной элемент который внезапно оказывается не файлом, а папкой, то ловит ошибку. Сообщение об ошибке скорее всего прописано автором скрипта в блоке try... catch, поэтому ее описание может не соотвестовать действительности.
 
Последнее редактирование:
  • Спасибо
Реакции: ~RA~

workzhen

Участник
Топикстартер
Сообщения
8
Реакции
0
Код:
#target photoshop
app.bringToFront();

if (!documents.length) {

    var savedDisplayDialogs = app.displayDialogs;

    var inputFolder = Folder.selectDialog('Select the input folder', '');
    var inputFiles = inputFolder.getFiles();

    app.displayDialogs = DialogModes.NO;

    for (var a = 0; a < inputFiles.length; a++) {
        try {
            var inDoc = open(inputFiles[a]);

            // Start doing stuff

            /* CONDITION #1 */
            if (app.activeDocument.name.indexOf('#1') != -1) {
                app.doAction('1VESNA 2023 ШАБЛОН', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #1 */

                /* CONDITION #2 */
            } else if (app.activeDocument.name.indexOf('#2') != -1) {
                app.doAction('2VESNA 2023 ШАБЛОН FLOW', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #2 */

                /* CONDITION #3 */
            } else if (app.activeDocument.name.indexOf('#3') != -1) {
                app.doAction('3VESNA 2023 ШАБЛОН FLOW2', 'heal  1 -2023'); // Change action & action set name
                 /* CONDITION #3 */
                
                /* CONDITION #4 */
            } else if (app.activeDocument.name.indexOf('#4') != -1) {
                app.doAction('4VESNA 2023 ШАБЛОН KROL', 'heal  1 -2023'); // Change action & action set name
                 /* CONDITION #4 */
                
                /* CONDITION #5 */
            } else if (app.activeDocument.name.indexOf('#5') != -1) {
                app.doAction('5VESNA 2023 ШАБЛОН POD', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #5 */
              

            } else {
                /* DO SOMETHING ELSE */
            }

            app.activeDocument.close(SaveOptions.SAVECHANGES);

            // Finish doing stuff

        } catch (e) {
            continue;
        }
    }

    app.displayDialogs = savedDisplayDialogs;
    alert('Script completed!' + '\n' + 'Files saved to:' + '\n' + inputFolder.fsName);

} else {
    alert('Please close all open files before running this script');
}
 

workzhen

Участник
Топикстартер
Сообщения
8
Реакции
0
cкрипт запускает экшен в зависимости от названия файла решетка1, решетка2 и так далее

если есть подпапки не работает. ПАМАГИТЕ!!!
спасибо
 

jazzy

Участник
Сообщения
328
Реакции
175
чего кричать-то? 'hz'
Код:
#target photoshop
app.bringToFront();

if (!documents.length) {

    var savedDisplayDialogs = app.displayDialogs;

    var inputFolder = Folder.selectDialog('Select the input folder', '');

    getFileList(inputFolder, inputFiles = [])

    app.displayDialogs = DialogModes.NO;

    for (var a = 0; a < inputFiles.length; a++) {
        try {
            var inDoc = open(inputFiles[a]);

            // Start doing stuff

            /* CONDITION #1 */
            if (app.activeDocument.name.indexOf('#1') != -1) {
                app.doAction('1VESNA 2023 ШАБЛОН', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #1 */

                /* CONDITION #2 */
            } else if (app.activeDocument.name.indexOf('#2') != -1) {
                app.doAction('2VESNA 2023 ШАБЛОН FLOW', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #2 */

                /* CONDITION #3 */
            } else if (app.activeDocument.name.indexOf('#3') != -1) {
                app.doAction('3VESNA 2023 ШАБЛОН FLOW2', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #3 */

                /* CONDITION #4 */
            } else if (app.activeDocument.name.indexOf('#4') != -1) {
                app.doAction('4VESNA 2023 ШАБЛОН KROL', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #4 */

                /* CONDITION #5 */
            } else if (app.activeDocument.name.indexOf('#5') != -1) {
                app.doAction('5VESNA 2023 ШАБЛОН POD', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #5 */


            } else {
                /* DO SOMETHING ELSE */
            }

            app.activeDocument.close(SaveOptions.SAVECHANGES);

            // Finish doing stuff

        } catch (e) {
            continue;
        }
    }
    app.displayDialogs = savedDisplayDialogs;
    alert('Script completed!' + '\n' + 'Files saved to:' + '\n' + inputFolder.fsName);

} else {
    alert('Please close all open files before running this script');
}

function getFileList(folder, files) {
    var cur = folder.getFiles();
    for (var i = 0; i < cur.length; i++) {
        if (!cur[i].hidden && cur[i] instanceof File) {
            files.push(cur[i])
        } else if (cur[i] instanceof Folder) {
            getFileList(cur[i], files)
        }
    }
}
 

workzhen

Участник
Топикстартер
Сообщения
8
Реакции
0
чего кричать-то? 'hz'
Код:
#target photoshop
app.bringToFront();

if (!documents.length) {

    var savedDisplayDialogs = app.displayDialogs;

    var inputFolder = Folder.selectDialog('Select the input folder', '');

    getFileList(inputFolder, inputFiles = [])

    app.displayDialogs = DialogModes.NO;

    for (var a = 0; a < inputFiles.length; a++) {
        try {
            var inDoc = open(inputFiles[a]);

            // Start doing stuff

            /* CONDITION #1 */
            if (app.activeDocument.name.indexOf('#1') != -1) {
                app.doAction('1VESNA 2023 ШАБЛОН', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #1 */

                /* CONDITION #2 */
            } else if (app.activeDocument.name.indexOf('#2') != -1) {
                app.doAction('2VESNA 2023 ШАБЛОН FLOW', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #2 */

                /* CONDITION #3 */
            } else if (app.activeDocument.name.indexOf('#3') != -1) {
                app.doAction('3VESNA 2023 ШАБЛОН FLOW2', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #3 */

                /* CONDITION #4 */
            } else if (app.activeDocument.name.indexOf('#4') != -1) {
                app.doAction('4VESNA 2023 ШАБЛОН KROL', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #4 */

                /* CONDITION #5 */
            } else if (app.activeDocument.name.indexOf('#5') != -1) {
                app.doAction('5VESNA 2023 ШАБЛОН POD', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #5 */


            } else {
                /* DO SOMETHING ELSE */
            }

            app.activeDocument.close(SaveOptions.SAVECHANGES);

            // Finish doing stuff

        } catch (e) {
            continue;
        }
    }
    app.displayDialogs = savedDisplayDialogs;
    alert('Script completed!' + '\n' + 'Files saved to:' + '\n' + inputFolder.fsName);

} else {
    alert('Please close all open files before running this script');
}

function getFileList(folder, files) {
    var cur = folder.getFiles();
    for (var i = 0; i < cur.length; i++) {
        if (!cur[i].hidden && cur[i] instanceof File) {
            files.push(cur[i])
        } else if (cur[i] instanceof Folder) {
            getFileList(cur[i], files)
        }
    }
}
ну как чего кричать, чтобы заметили )))

большое спасибо, но всеравно не работает с вашими правками
 

Вложения

  • Screenshot_111111111111111112.jpg
    Screenshot_111111111111111112.jpg
    36.7 КБ · Просм.: 87
  • Screenshot_11111111111111111.jpg
    Screenshot_11111111111111111.jpg
    11.6 КБ · Просм.: 92

workzhen

Участник
Топикстартер
Сообщения
8
Реакции
0
чего кричать-то? 'hz'
Код:
#target photoshop
app.bringToFront();

if (!documents.length) {

    var savedDisplayDialogs = app.displayDialogs;

    var inputFolder = Folder.selectDialog('Select the input folder', '');

    getFileList(inputFolder, inputFiles = [])

    app.displayDialogs = DialogModes.NO;

    for (var a = 0; a < inputFiles.length; a++) {
        try {
            var inDoc = open(inputFiles[a]);

            // Start doing stuff

            /* CONDITION #1 */
            if (app.activeDocument.name.indexOf('#1') != -1) {
                app.doAction('1VESNA 2023 ШАБЛОН', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #1 */

                /* CONDITION #2 */
            } else if (app.activeDocument.name.indexOf('#2') != -1) {
                app.doAction('2VESNA 2023 ШАБЛОН FLOW', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #2 */

                /* CONDITION #3 */
            } else if (app.activeDocument.name.indexOf('#3') != -1) {
                app.doAction('3VESNA 2023 ШАБЛОН FLOW2', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #3 */

                /* CONDITION #4 */
            } else if (app.activeDocument.name.indexOf('#4') != -1) {
                app.doAction('4VESNA 2023 ШАБЛОН KROL', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #4 */

                /* CONDITION #5 */
            } else if (app.activeDocument.name.indexOf('#5') != -1) {
                app.doAction('5VESNA 2023 ШАБЛОН POD', 'heal  1 -2023'); // Change action & action set name
                /* CONDITION #5 */


            } else {
                /* DO SOMETHING ELSE */
            }

            app.activeDocument.close(SaveOptions.SAVECHANGES);

            // Finish doing stuff

        } catch (e) {
            continue;
        }
    }
    app.displayDialogs = savedDisplayDialogs;
    alert('Script completed!' + '\n' + 'Files saved to:' + '\n' + inputFolder.fsName);

} else {
    alert('Please close all open files before running this script');
}

function getFileList(folder, files) {
    var cur = folder.getFiles();
    for (var i = 0; i < cur.length; i++) {
        if (!cur[i].hidden && cur[i] instanceof File) {
            files.push(cur[i])
        } else if (cur[i] instanceof Folder) {
            getFileList(cur[i], files)
        }
    }
}
Не весь код скопировал. ВСЁ РАБОТАЕТ, СПАСИБО!!!
 

jazzy

Участник
Сообщения
328
Реакции
175
Проблема подобных скриптов в том, что их сложно рассматривать вне контекста рабочего процесса. Я не знаю, зачем автор добавил проверку есть ли в рабочей области активные документы, но если это будет мешать вам в дальнейшем - можете просто убрать в начале скрипта
Код:
if (!documents.length) {
и
Код:
} else {
    alert('Please close all open files before running this script');
}
в конце.

У меня есть старый скрипт, не помню выкладывал ли его сюда, но его суть в том, что он ищет в имени экшена имя открытого документа (или наоборот имя экшена в имени документа - как настроите). Сам скрипт можно записать в экшен и эта операция автоматом будет делать то, что делает ваш скрипт. Причем все прекрасно работает со стандартным батчем. Посмотрите, возможно это упростит вашу работу в будущем.
 
  • Спасибо
Реакции: workzhen