[PS CC-CC2021] Скрипт "переложить / сохранить"

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
Задача проста. Исходный файл открытого документа (всегда открыт, а не создан новый) переложить в заданный каталог и открытый сохранить с тем же именем на старое место. То есть Save, который перекладывает исходник перед записью.
На AppleScript всё работает, но запустить AppleScript из фотошопа нельзя, ему подавай только JavaScript. Приходится запускать скрипт из индизайна или как приложение из файндера. Хотя более логично из фотошопа.
Вариант с запуском AppleScript'а из JavaScript не проходит.
Как это реализовать на JavaScript?
 

Gad

Сообщения
2 971
Реакции
1 405
Попробуйте так
JavaScript:
var doc = app.activeDocument
fCopy = "/d/folder/" //путь к папке
File(doc.name).copy(File(fCopy + doc.name.replace(doc.path, '')));
doc.save()
 
Последнее редактирование:

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
Попробуйте так
JavaScript:
var doc = app.activeDocument
fCopy = "/d/folder/" //путь к папке
File(doc.name).copy(File(fCopy + doc.name.replace(doc.path, '')));
doc.save()
Не проходит. Путь, естественно забит реальный, в Data Browser рисуется как настоящий.
Нужно именно переложить (move, чтобы ликвидировать файл), но copy тоже не делает, работает только save. И то не всегда.
Проблема в сети. Что там творит самба неизвестно, но файл отказывается сохраняться. Иногда. Открыл–обработал–сохранил, потом открыл–подкрутил — всё, хана, не сохраняется.
Единственный вариант — убрать исходник и сохранить файл на старое место.
Раньше подключишься по afp и никаких проблем, а теперь afp вне закона, на сервере только smb. Главное никогда не знаешь когда возникнет проблема. Даже на простом копировании в finder часть файлов может оказаться битыми.
С линуксовым сервером проблем по smb нет, только с Microsoft. Ну не любят они MacOS!
 

Gad

Сообщения
2 971
Реакции
1 405
Нужно именно переложить
File(doc.name).rename(File(fCopy + doc.name.replace(doc.path, '')));
Проблема в сети.
Могли бы и сразу написать 🙂 Покажите
из фотошопа нельзя
Не факт
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Фотошоп applescript поддерживает если что. Запускать его можно сам по себе, а не из какой-то еще программы.
 

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
Фотошоп applescript поддерживает если что. Запускать его можно сам по себе, а не из какой-то еще программы.
Запускать можно. Откуда угодно, но не из самого фотошопа!
проверьте версию smb
Проверяй, не проверяй другой не будет. Это дома я могу творить что хочу, а на работе этим занимаются специально обученные люди.
 

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
И на него дан чёткий ответ
Вот это?
JavaScript:
var doc = app.activeDocument;
fCopy = doc.path + "/trash/";
File(doc.name).rename(File(fCopy + doc.name.replace(doc.path, '')));
doc.save();
Работает только save(), исходник не перекладывается.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
По copy / remove обычно нормально работает, как минимум результат всегда можно проверить - copy его возвращает.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
сохранять в сетевую папку из фотошопа не стоит. нормальный процесс - сохранить в локальный файл, потом его скопировать куда надо
 

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
сохранять в сетевую папку из фотошопа не стоит
Это почему? Постоянно так работаем, 30 лет уже. С сервера взял, обратно сохранил. Проблемы только в этом году появились после смены софта на серверах.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
у моих клиентов постоянно проблемы, и форумы adobe ими полнятся. ну если работает, то ок. вообще много у кого нестабильно, фотошоп теряет соединение и пишет что не может сохранить файл по указанному пути. я в скриптах в таких случаях всегда сохраняю в локальный tmp файл, потом его уже переношу на сервер
 

Gad

Сообщения
2 971
Реакции
1 405
специально обученные люди
Так они и должны разобраться что происходит :) Городить костыль со скриптами можно конечно, но лучше разобраться что мешает нормальной работе. Косяк явно со стороны MacOS ибо SMB детище майкрософт :) Как вариант, если с Lin проблем нет, можно примонтировать рабочие папки WIn на Lin и расшарить.
 
Последнее редактирование:

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
Сетка корпоративная, переделывать её никто не будет. На линуксе сделали свой сервер для личного использования.
Люди достаточно опытные, а бардак наступил после очередного серверного софта.
Пока пользуюсь костылём — AppleScript записал как приложение, которое запускаю JavaScript'ом из фотошопа.
 

Gad

Сообщения
2 971
Реакции
1 405
Сетка корпоративная, переделывать её никто не будет. На линуксе сделали свой сервер для личного использования.
Люди достаточно опытные, а бардак наступил после очередного серверного софта.
Пока пользуюсь костылём — AppleScript записал как приложение, которое запускаю JavaScript'ом из фотошопа.
Вам ведь все равно куда его перекладывать, сделайте временную папку локально, а не на сервере, скорее всего тогда скрипт выше сработает.
Хотя не факт, скорее всего дело в SMB3 в котором повысили уровень безопасности :)
 
Последнее редактирование:

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
сделайте временную папку локально
Проходили, не помогает. Потом копируешь на сервер и некоторые файлы либо не перекрывает, либо оказываются битыми. Один вариант — убрать и записать.
Интересней с файлами в типографию. Их обычно кладём в определённый каталог, скрипт (Win) когда их видит кидает в типографию и перекладывает в отправленные. Так иногда файл не удаляется и скрипт начинает веселиться вовсю — кидает в типографию до посинения! Один вариант борьбы — кто кинул файл, тот отцепляется от сервера, тогда файл отпускается.
Тоже грешу на SMB3.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
вы в js попробовали делать с remove()?

Код:
var doc = app.activeDocument;
fCopy = doc.path + "/trash/";
var targetFile = File(fCopy + doc.name);
if(targetFile.exists) targetFile.remove();
File(doc.fullName).copy(targetFile);
File(doc.fullName).remove();
doc.save();
 

apg_777

Топикстартер
15 лет на форуме
Сообщения
278
Реакции
81
Делал.
1. doc.save() перестаёт работать. Data Browser ExtendScript Toolkit показывает что к этому моменту doc теряет поле path.
2. Убиваются тэги исходника, дата... В MacOS есть некоторые дополнительные поля при работе с файлами. На работе договорились — "зелёный" файл готов, "красный" требует дополнительного внимания, не крашеный ещё не обрабатывался и т.д. Один взгляд в каталог и ясно что предстоит.
Вариант с запуском приложения от AppleScript вполне устраивает. Ещё добавлю замену <скрипт>.jsx на подстановку в строку запуска <скрипт>.app и не надо будет каждый раз скрипт под конкретную задачу подправлять.